2009-06-30 8 views
28

Mögliche Duplizieren:
Best way to copy the entire contents of a directory in C#Wie kopiere ich einen Ordner und alle Unterordner und Dateien in .NET?

Ich möchte Ordner kopieren mit all seinen Unterordnern und Dateien von einem Ort zum anderen in .NET. Was ist der beste Weg, dies zu tun?

Ich sehe die Copy-Methode in der System.IO.File-Klasse, aber ich fragte mich, ob es einen einfacheren, besseren oder schnelleren Weg gab, als den Verzeichnisbaum zu crawlen.

+0

http://xneuron.wordpress.com/2007/04/12/copy-directory-and-its-content-to-another-directory-in-c/ könnten hilfreich für Sie sein; Es zeigt eine einfache rekursive Methode –

+1

Ich freue mich darauf, wenn ich Operationen auf dem Dateisystem durchführen muss, weil ich eine legitime Entschuldigung habe, Rekursion zu verwenden! – mmcdole

Antwort

49

Nun, es gibt die VisualBasic.dll-Implementierung, die Steve referenziert, und hier ist etwas, das ich verwendet habe.

private static void CopyDirectory(string sourcePath, string destPath) 
{ 
    if (!Directory.Exists(destPath)) 
    { 
     Directory.CreateDirectory(destPath); 
    } 

    foreach (string file in Directory.GetFiles(sourcePath)) 
    { 
     string dest = Path.Combine(destPath, Path.GetFileName(file)); 
     File.Copy(file, dest); 
    } 

    foreach (string folder in Directory.GetDirectories(sourcePath)) 
    { 
     string dest = Path.Combine(destPath, Path.GetFileName(folder)); 
     CopyDirectory(folder, dest); 
    } 
} 
2

Wenn Sie nichts besseres bekommen ... vielleicht Process.Start verwenden, um robocopy.exe zu starten?

+0

Robocopy analysiert Anführungszeichen nicht korrekt, wenn sie mit Process.Start ausgeführt wird. Daher dürfen Ihre Quell-/Zielpfade keine Leerzeichen enthalten. Wenn dies der Fall ist, müssen Sie den Dateinamen 8dot3 verwenden. Die einzige Zeit, in der Robocopy Anführungszeichen korrekt zu akzeptieren scheint, ist eine Befehlszeile oder eine BAT-Datei. – Brain2000

+0

@ Brain2000 Sie können immer kurze Wege verwenden, wenn Leerzeichen ein Problem sind –

12

Michal Talaga verweist die folgende in seiner post:

  • Microsofts Erklärung darüber, warum sollte es nicht eine Directory.Copy() Betrieb in .NET sein.
  • Eine Implementierung von CopyDirectory() aus der Microsoft.VisualBasic.dll-Assembly.

jedoch eine rekursive Implementierung basierend auf File.Copy() und Directory.CreateDirectory() sollte für die grundlegendsten Bedürfnisse ausreichen.

+1

Das ist ein interessanter Link. Ich bin nicht sicher, ob die Argumente von Microsoft viel Wasser enthalten. Aber es erklärt, warum die Funktionalität fehlt. – dthrasher

Verwandte Themen