2012-01-29 15 views
5

Tengo un programa C0 autoupdater. Descargará un archivo rar que contiene los archivos nuevos o modificados para la actualización de algún software. El archivo rar tiene su estructura al igual que el directorio base del software, pero solo contiene archivos o carpetas nuevos o modificados. ¿Hay una manera fácil de "combinar" estos archivos/carpetas en el directorio de destino, de modo que si el archivo/carpeta ya existe será reemplazado y si no se agregará o tengo que recorrer manualmente cada archivo/carpeta y hacer esto yo mismo? Sólo la esperanza existe una pequeña función de combinación de .NET que tiene :)C# fusionar un directorio con otro

Respuesta

19

DirectoryInfo Class

El siguiente ejemplo muestra cómo copiar un directorio y su contenido.

public static void CopyAll(DirectoryInfo source, DirectoryInfo target) 
{ 
    if (source.FullName.ToLower() == target.FullName.ToLower()) 
    { 
     return; 
    } 

    // Check if the target directory exists, if not, create it. 
    if (Directory.Exists(target.FullName) == false) 
    { 
     Directory.CreateDirectory(target.FullName); 
    } 

    // Copy each file into it's new directory. 
    foreach (FileInfo fi in source.GetFiles()) 
    { 
     Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name); 
     fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true); 
    } 

    // Copy each subdirectory using recursion. 
    foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) 
    { 
     DirectoryInfo nextTargetSubDir = 
      target.CreateSubdirectory(diSourceSubDir.Name); 
     CopyAll(diSourceSubDir, nextTargetSubDir); 
    } 
} 
+0

Se pregunta por qué su mensaje no se muestra a mí cuando escribo uno ?? –

+1

@FelixK. Publiqué una respuesta, luego pensé que no era la correcta, la eliminé, edité mientras estaba borrada y sin recuperar. Una práctica común, francamente. – GSerg

+0

Oye, gracias compañero –

1

La forma más sencilla es utilizar el método FileSystem.MoveDirectory. Asegúrese de que añade una referencia a la Microsoft.VisualBasic.dll:

using Microsoft.VisualBasic.FileIO; 
... 
// Merge D:\SourceDir with D:\DestDir: 
FileSystem.MoveDirectory("D:\\SourceDir", "D:\\DestDir", true /* Overwrite */); 
+0

La pregunta es fusionar el directorio de origen con el directorio de destino, ¿funcionará MoveDirectory en este caso? Creo que MoveDirectory tiende a crear un nuevo directorio en destino y generará un error "No se puede crear un archivo cuando ese archivo ya existe" si el directorio ya existe. – kaushalparik27

+1

¿Por qué creer si pudieras intentarlo? Combinará los directorios, por lo que terminará con un DestDir único con todos los contenidos combinados. – Yarik

Cuestiones relacionadas