今回は、フォルダの高速コピーをご紹介します。
フォルダのコピーとは、
サブフォルダも含めたすべてのファイルをコピーする
やり方になります。
再帰処理と並列処理を同関数で行っているので、
勉強中の方は処理の動きをご参考いただければ嬉しいです!
参考サイト
基本的な構文はこのサイトを参考にしました。
並列処理を追加したら高速になるなーの考えでちょっとだけ改造してます。
dobon.net
ソースコード
/// <summary> /// サブフォルダを含むフォルダのコピー /// </summary> /// <param name="CopyFldName">コピーするフォルダパス</param> /// <param name="PasteFldName">コピー先のフォルダパス</param> public static void Set_CopyDirectory(string CopyFldName, string PasteFldName) { //コピー先のディレクトリがないときは作成 if (!Directory.Exists(PasteFldName)) { Directory.CreateDirectory(PasteFldName); File.SetAttributes(PasteFldName, File.GetAttributes(CopyFldName)); } //コピー先のディレクトリ名の末尾に"\"をつける if (PasteFldName[PasteFldName.Length - 1] != Path.DirectorySeparatorChar) { PasteFldName = PasteFldName + Path.DirectorySeparatorChar; } //コピー元のディレクトリにあるファイルをコピー ※ここで並列処理 string[] files = Directory.GetFiles(CopyFldName); Parallel.ForEach(files, (file) => { File.Copy(file, PasteFldName + Path.GetFileName(file), true); }); //コピー元のディレクトリにあるディレクトリについて、再帰的に呼び出す string[] dirs = Directory.GetDirectories(CopyFldName); foreach (string dir in dirs) { Set_CopyDirectory(dir, PasteFldName + Path.GetFileName(dir)); } }
以上がコピー処理を行う関数になります。
サブフォルダを考慮して再帰処理を行っている点と、
ファイルのコピーに並列処理を行っている点です。
以上、フォルダの高速コピーでした。