ソースフォルダーとその中のすべてのファイルとフォルダーを別の場所に再帰的にコピーする関数を作成しようとしています。
現時点では、メイン フォルダー内に各フォルダーを定義する必要があるため、コードが肥大化して冗長になります。
これを行うより効率的な方法は何ですか?
ソースフォルダーとその中のすべてのファイルとフォルダーを別の場所に再帰的にコピーする関数を作成しようとしています。
現時点では、メイン フォルダー内に各フォルダーを定義する必要があるため、コードが肥大化して冗長になります。
これを行うより効率的な方法は何ですか?
私の質問を見てください:
並列foreachを使用したディレクトリのコピーのパフォーマンスは非常に高速です
private static void CopyAll(string SourcePath, string DestinationPath)
{
string[] directories = System.IO.Directory.GetDirectories(SourcePath, "*.*", SearchOption.AllDirectories);
Parallel.ForEach(directories, dirPath =>
{
Directory.CreateDirectory(dirPath.Replace(SourcePath, DestinationPath));
});
string[] files = System.IO.Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories);
Parallel.ForEach(files, newPath =>
{
File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath));
});
}
ソース: C# - c-sharp でソースから宛先フォルダーにファイルとフォルダーを再帰的にコピーする
public static void CopyFolder(string sourceFolder, string destFolder)
{
if (!Directory.Exists(destFolder))
Directory.CreateDirectory(destFolder);
string[] files = Directory.GetFiles(sourceFolder);
foreach (string file in files)
{
string name = Path.GetFileName(file);
string dest = Path.Combine(destFolder, name);
File.Copy(file, dest);
}
string[] folders = Directory.GetDirectories(sourceFolder);
foreach (string folder in folders)
{
string name = Path.GetFileName(folder);
string dest = Path.Combine(destFolder, name);
CopyFolder(folder, dest);
}
}
GetDirectories/GetFiles を使用することは、私の目にはやや古くDirectory.EnumerateFileSystemEntries(source);
なっています。代わりに使用する方が高速です。