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 回答
2

这样做

 void Copy(string sourceDir, string targetDir)
 {
   Directory.CreateDirectory(targetDir);
   foreach (var file in Directory.GetFiles(sourceDir))
       File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)));

   foreach (var directory in Directory.GetDirectories(sourceDir))
       Copy(directory, Path.Combine(targetDir, Path.GetFileName(directory)));
 }
于 2014-12-26T08:39:22.407 回答
0

在我看来,使用 GetDirectories/GetFiles 有点过时了,我会改用Directory.EnumerateFileSystemEntries(source);它,因为它更快。

于 2014-09-18T12:43:44.203 回答