2009-06-30 32 views
28

Eventuali duplicati:
Best way to copy the entire contents of a directory in C#Come si copia una cartella e tutte le sottocartelle e i file in .NET?

vorrei copiare la cartella con tutte le sue sottocartelle ei file da una posizione a un'altra in .NET. Qual'è il miglior modo per farlo?

Vedo il metodo Copia nella classe System.IO.File, ma mi chiedevo se esistesse un metodo più semplice, migliore o più veloce della ricerca per indicizzazione della struttura della directory.

+0

http://xneuron.wordpress.com/2007/04/12/copy-directory-and-its-content-to-another-directory-in-c/ potrebbe essere utile a voi; mostra un semplice metodo ricorsivo –

+1

Non vedo l'ora di quando ho bisogno di fare operazioni sul file system perché ho una scusa legittima per usare la ricorsione! – mmcdole

risposta

49

Bene, c'è l'implementazione di VisualBasic.dll a cui fa riferimento Steve, ed ecco qualcosa che ho usato.

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

Se non si ottiene qualcosa di meglio ... forse utilizzare per attivare robocopy.exe?

+0

Robocopy non analizza correttamente le virgolette quando viene eseguito con Process.Start, quindi i percorsi di origine/destinazione non devono contenere spazi. Se lo fanno, devi usare il nome file 8dot3. L'unica volta che Robocopy sembra accettare correttamente le virgolette è da una riga di comando o da un file BAT. – Brain2000

+0

@ Brain2000 puoi sempre utilizzare percorsi brevi se gli spazi sono un problema –

12

Michal Talaga riferimento quanto segue nel suo post: spiegazione

  • di Microsoft sul perché non ci dovrebbe essere un Directory.Copy() il funzionamento in .NET.
  • Un'implementazione di CopyDirectory() dall'assembly Microsoft.VisualBasic.dll.

Tuttavia, un'implementazione ricorsiva basata su File.Copy() e Directory.CreateDirectory() dovrebbe essere sufficiente per il più fondamentale dei bisogni.

+1

Questo è un collegamento interessante. Non sono sicuro che gli argomenti di Microsoft tengano molta acqua. Ma spiega perché manca la funzionalità. – dthrasher

Problemi correlati