sábado, 4 de febrero de 2012

Copiar contenido de un directorio a otro en C#

Os dejo un procedimiento que encontré (no se donde...) y que utilicé una vez para copiar el contenido de una carpeta en otra.

DirectoryInfo origen = new DirectoryInfo(@"C:\Origen");
DirectoryInfo destino = new DirectoryInfo(@"C:\Destino");
CopyDirectory(origen, destino);


     static void CopyDirectory(DirectoryInfo origen, DirectoryInfo destino)
             {
                 if (!destino.Exists)
                 {
                    destino.Create();
                 }

                 FileInfo[] files = origen.GetFiles();
                 foreach (FileInfo file in files)
                 {
                     file.CopyTo(Path.Combine(destino.FullName,file.Name));
                 }

                 // Subcarpetas
                 DirectoryInfo[] dirs = origen.GetDirectories();
                 foreach (DirectoryInfo dir in dirs)
                 {
                     string destinoDir = Path.Combine(destino.FullName, dir.Name);
                     // llamada recusriva
                     CopyDirectory(dir, new DirectoryInfo(destinoDir));
                 }
        }


Para ello se ha usado el método CopyTo y una llamada recursiva para copiar también todas las subcarpetas contenidas en el directorio origen.