Pregunta C # fusionar un directorio con otro


Tengo un programa autoupdater C #. Se descargará un archivo rar que contiene los archivos modificados o nuevos 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 / carpetas nuevos o modificados. ¿Existe una manera fácil de "fusionar" estos archivos / carpetas con el directorio de destino, de modo que si el archivo / carpeta ya existe, será reemplazado y, de lo contrario, se agregará o tendré que revisar manualmente cada archivo? / carpeta y hacer esto yo mismo? Solo espero que haya una pequeña y agradable función de combinación que .NET tiene :)


5
2018-01-29 13:35


origen


Respuestas:


Clase de DirectoryInfo

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);
    }
}

19
2018-01-29 13:42



La forma más simple es usar el FileSystem.MoveDirectory método. Asegúrese de agregar 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 */);

2
2017-11-04 14:58