2009-12-29 23 views
12

Tengo una carpeta con 10 archivos de texto en C: \ TEXTFILES \ unidad en mi máquina. Quiero copiar la carpeta TEXTFILES y su contenido completamente de mi máquina a otra máquina. Cómo copiar lo mismo usando C#.Copia de carpeta en C#

+0

favor me ayude con un código de ejemplo. Como necesito copiar la carpeta desde una máquina servidor a otra máquina servidor – venkat

+0

@sukmar, no hay forma de copiar un directorio usando una sola función .NET, esto es por seguridad. Deberá escribir su propia función. Ver mi respuesta para más detalles. – serhio

+0

.NET podría darnos este método de "alto nivel" en el marco. – Seva

Respuesta

33
using System; 
using System.IO; 

class DirectoryCopyExample 
{ 
    static void Main() 
    { 
     DirectoryCopy(".", @".\temp", true); 
    } 

    private static void DirectoryCopy(
     string sourceDirName, string destDirName, bool copySubDirs) 
    { 
     DirectoryInfo dir = new DirectoryInfo(sourceDirName); 
     DirectoryInfo[] dirs = dir.GetDirectories(); 

     // If the source directory does not exist, throw an exception. 
     if (!dir.Exists) 
     { 
      throw new DirectoryNotFoundException(
       "Source directory does not exist or could not be found: " 
       + sourceDirName); 
     } 

     // If the destination directory does not exist, create it. 
     if (!Directory.Exists(destDirName)) 
     { 
      Directory.CreateDirectory(destDirName); 
     } 


     // Get the file contents of the directory to copy. 
     FileInfo[] files = dir.GetFiles(); 

     foreach (FileInfo file in files) 
     { 
      // Create the path to the new copy of the file. 
      string temppath = Path.Combine(destDirName, file.Name); 

      // Copy the file. 
      file.CopyTo(temppath, false); 
     } 

     // If copySubDirs is true, copy the subdirectories. 
     if (copySubDirs) 
     { 

      foreach (DirectoryInfo subdir in dirs) 
      { 
       // Create the subdirectory. 
       string temppath = Path.Combine(destDirName, subdir.Name); 

       // Copy the subdirectories. 
       DirectoryCopy(subdir.FullName, temppath, copySubDirs); 
      } 
     } 
    } 
} 

De MSDN

+0

Esto se ve bien si el origen y el destino de las máquinas están conectados. Pero el código anterior arroja una excepción si la máquina de destino no está conectada o puede esperar que las credenciales del usuario se conecten. Luego, en este tipo de escenarios, el código anterior falla. ¿Hay alguna manera de superar este tipo de excepciones durante la transferencia de archivos de una máquina a otra? – venkat

+3

¿Qué espera que sea el resultado si la máquina de destino no está conectada o espera que las credenciales completen la operación? Creo que una excepción sería el comportamiento apropiado si la máquina de destino no está disponible, ya que no puedo pensar en ninguna forma de forzar el destino en línea. Si se requieren credenciales, quizás se muestre un cuadro de diálogo para solicitar las credenciales. –

+0

La solución no funciona si hay dos niveles de jerarquía de carpetas. Simplemente lo copia a la carpeta base. – whihathac

-4

Encontrará todo lo que necesita en el espacio de nombres System.IO, y específicamente en las clases File y Directory.

+2

-1 no es útil. – toddmo

2
 string path = @"C:\TEXTFILES\"; 
     string path2 = @"P:\myNetworkPath\tesssst"; 

     try 
     { 
      Directory.CreateDirectory(path2); 

      foreach (string fileName in Directory.GetFiles(path)) 
      { 
       File.Copy(
        Path.Combine(path, fileName), 
        Path.Combine(path2, fileName), true); 
      } 
     } 
     catch 
     { 
      Console.WriteLine("Exception"); 
     } 

Para obtener una copia más profunda, ver:

http://www.codeproject.com/KB/files/copydirectoriesrecursive.aspx

9
private void copyDirectory(string strSource, string strDestination) 
{ 
    if (!Directory.Exists(strDestination)) 
    { 
     Directory.CreateDirectory(strDestination); 
    } 

    DirectoryInfo dirInfo = new DirectoryInfo(strSource); 
    FileInfo[] files = dirInfo.GetFiles(); 
    foreach(FileInfo tempfile in files) 
    { 
     tempfile.CopyTo(Path.Combine(strDestination,tempfile.Name)); 
    } 

    DirectoryInfo[] directories = dirInfo.GetDirectories(); 
    foreach(DirectoryInfo tempdir in directories) 
    { 
     copyDirectory(Path.Combine(strSource, tempdir.Name), Path.Combine(strDestination, tempdir.Name)); 
    } 

} 
Cuestiones relacionadas