Cómo copio una carpeta y todas las subcarpetas y archivos in.NET? [duplicado]


Posible Duplicado:
La mejor manera de copiar todo el contenido de un directorio en C #

Me gustaría copiar la carpeta con todas sus subcarpetas y el archivo de una ubicación a otra en .NET. ¿Cuál es la mejor manera de hacer esto?

Veo el método de Copia en la clase System.IO.File, pero me preguntaba si había una forma más fácil, mejor o más rápida que rastrear el árbol de directorios.

Author: Community, 2009-07-01

3 answers

Bueno, ahí está el VisualBasic.implementación dll que Steve hace referencia, 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);
    }
}
 49
Author: Michael Petrotta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-01 00:42:10

Michal Talaga hace referencia a lo siguiente en su post :

  • La explicación de Microsoft sobre por qué no debería haber un directorio.Operación Copy () en .NET.
  • Una implementación de CopyDirectory() de Microsoft.VisualBasic.dll assembly.

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

 12
Author: Steve Guidi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-30 01:31:26

Si no consigues nada mejor... tal vez usar Process.Start para encender robocopy.exe?

 2
Author: Marc Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-30 23:54:00