Вопрос по c#, visual-studio-2010, .net – Как создать рекурсивную функцию для копирования всех файлов и папок

6

Я пытаюсь создать функцию, которая будет рекурсивно копировать исходную папку и все файлы и папки внутри нее в другое место.

На данный момент я должен определить каждую папку в основной папке, что делает код раздутым и избыточным.

Какой более эффективный способ сделать это?

возможный дубликатWhat is the best way to recursively copy contents in C#? nawfal
У MSDN есть пример:How to: Copy Directories. BluesRockAddict
Более эффективно, чем [отсутствует код / детали]? Henk Holterman

Ваш Ответ

4   ответа
0

Использование GetDirectories / GetFiles несколько устарело в моих глазах, я бы использовалDirectory.EnumerateFileSystemEntries(source); вместо этого, как это быстрее.

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)));
 }
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);  
    }  
}
Выдает исключение, если каталог назначения ("dest" в строке 17) не существует. Вставьте это в строку 18: if (! Directory.Exists (dest)) Directory.CreateDirectory (dest);
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));
}); 
}

Похожие вопросы