7

ソースフォルダーとその中のすべてのファイルとフォルダーを別の場所に再帰的にコピーする関数を作成しようとしています。

現時点では、メイン フォルダー内に各フォルダーを定義する必要があるため、コードが肥大化して冗長になります。

これを行うより効率的な方法は何ですか?

4

4 に答える 4

10

私の質問を見てください:

並列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));
}); 
}
于 2012-04-30T20:01:56.397 に答える
4

ソース: 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);  
    }  
}
于 2012-04-30T19:56:21.190 に答える
0

GetDirectories/GetFiles を使用することは、私の目にはやや古くDirectory.EnumerateFileSystemEntries(source);なっています。代わりに使用する方が高速です。

于 2014-09-18T12:43:44.203 に答える