2009-06-30 25 views
28

Duplicar posible:
Best way to copy the entire contents of a directory in C#¿Cómo copio una carpeta y todas las subcarpetas y archivos en .NET?

me gustaría copiar carpeta con todas sus subcarpetas y archivos de un lugar a otro en .NET. ¿Cuál es la mejor manera de hacer esto?

veo el método de copia de la clase System.IO.File, pero se preguntaba si había una manera más fácil, mejor o más rápido que para rastrear el árbol de directorios.

+0

http://xneuron.wordpress.com/2007/04/12/copy-directory-and-its-content-to-another-directory-in-c/ podría ser útil para usted; muestra un método recursivo simple –

+1

¡Espero cuando necesito hacer operaciones en el sistema de archivos porque tengo una excusa legítima para usar la recursión! – mmcdole

Respuesta

49

Bueno, hay la aplicación VisualBasic.dll que Steve referencias, y aquí hay algo que he utilizado.

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

Si no obtiene nada mejor ... quizás use Process.Start para encender robocopy.exe?

+0

Robocopy no analiza las comillas correctamente cuando se ejecuta con Process.Start, por lo que las rutas de origen/destino no deben contener espacios. Si lo hacen, debes usar el nombre de archivo 8dot3. La única vez que Robocopy parece aceptar citas correctamente es desde una línea de comando o un archivo BAT. – Brain2000

+0

@ Brain2000 siempre puede usar rutas cortas si los espacios son un problema –

12

Michal Talaga hace referencia a lo siguiente en su post: explicación

  • de Microsoft acerca de por qué no debería ser un Directory.Copy() operación en .NET.
  • Una implementación de CopyDirectory() del conjunto Microsoft.VisualBasic.dll.

Sin embargo, una implementación recursiva basa en File.Copy() y Directory.CreateDirectory() debería ser suficiente para la más básica de las necesidades.

+1

Ese es un enlace interesante. No estoy seguro de que los argumentos de Microsoft tengan mucha agua. Pero explica por qué falta la funcionalidad. – dthrasher

Cuestiones relacionadas