フォルダをコピーする
スポンサーリンク
.NET Framework には、ディレクトリ (フォルダ) 内をすべてコピーするようなメソッドは用意されていません。手動でディレクトリを作成し、配下にあるすべてのディレクトリとファイルをコピーすることになります。
以下は、その処理をメソッド化したものです。再帰呼び出しを使って、配下にあるすべてのディレクトリとファイルをコピーしています。第 3 引数の "上書き指定" によって同名のファイルの上書きを指定することができます。
サンプルコード
以下にサンプルコードを示します。
J# 全般
/************************************************************************************** * ファイルまたはディレクトリ、およびその内容を新しい場所にコピーします。 * 新しい場所に同名のファイルがある場合は上書きしません。 * * @param stSourcePath コピー元のディレクトリのパス。 * @param stDestPath コピー先のディレクトリのパス。 **************************************************************************************/ public static final void CopyDirectory(final String stSourcePath, final String stDestPath) { CopyDirectory(stSourcePath, stDestPath, false); } /************************************************************************************** * ファイルまたはディレクトリ、およびその内容を新しい場所にコピーします。 * * @param stSourcePath コピー元のディレクトリのパス。 * @param stDestPath コピー先のディレクトリのパス。 * @param bOverwrite コピー先が上書きできる場合は true。それ以外の場合は false。 **************************************************************************************/ public static final void CopyDirectory(final String stSourcePath, final String stDestPath, boolean bOverwrite) { // コピー先のディレクトリがなければ作成する if (! System.IO.Directory.Exists(stDestPath)) { System.IO.Directory.CreateDirectory(stDestPath); System.IO.File.SetAttributes(stDestPath, System.IO.File.GetAttributes(stSourcePath)); bOverwrite = true; } // 配下のファイルをすべて取得する final String[] stFilePathes = System.IO.Directory.GetFiles(stSourcePath); // コピー元のディレクトリにあるすべてのファイルをコピーする if (bOverwrite) { for (int i = 0; i <= stFilePathes.length - 1; i++) { final String stCopyTo = System.IO.Path.Combine(stDestPath, System.IO.Path.GetFileName(stFilePathes[i])); System.IO.File.Copy(stFilePathes[i], stCopyTo, true); } // 上書き不可能な場合は存在しない時のみコピーする } else { for (int i = 0; i <= stFilePathes.length - 1; i++) { if (! System.IO.File.Exists(stFilePathes[i])) { final String stCopyTo = System.IO.Path.Combine(stDestPath, System.IO.Path.GetFileName(stFilePathes[i])); System.IO.File.Copy(stFilePathes[i], stCopyTo, false); } } } // 配下のディレクトリを総て取得する final String[] stDirPathes = System.IO.Directory.GetDirectories(stSourcePath); // コピー元のディレクトリをすべてコピーする (再帰) for (int i = 0; i <= stDirPathes.length - 1; i++) { final String stCopyTo = System.IO.Path.Combine(stDestPath, System.IO.Path.GetFileName(stDirPathes[i])); CopyDirectory(stDirPathes[i], stCopyTo, bOverwrite); } }
使用例は以下のようになります。
J# 全般
// フォルダをコピーする (コピー先に同名のファイルがある場合は上書きしない) CopyDirectory("C:\\Hoge\\", "C:\\Foo\\"); // フォルダをコピーする (コピー先に同名のファイルがある場合は上書きする) CopyDirectory("C:\\Hoge\\", "C:\\Foo\\", true);
関連するリファレンス
準備中です。