C#合并一个目录到另一个目录

8
我有一个C#自动更新程序。它将下载一个RAR文件,其中包含更新软件的已更改或新文件。RAR文件的结构与软件的基本目录相同,但仅包含更改或新文件/文件夹。是否有一种简单的方法来“合并”这些文件/文件夹到目标目录中,以便如果文件/文件夹已经存在,则将其替换,如果不存在,则将其添加,或者我必须手动遍历每个文件/文件夹并自己执行此操作?只是希望有一个.NET拥有的漂亮的小合并函数 :)
2个回答

23

DirectoryInfo 类

以下示例演示如何复制目录及其内容。

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

当我自己发帖时,为什么我的帖子没有显示给我看? - Felix K.
1
@FelixK。我发布了一个答案,然后认为它不是正确的答案,将其删除,同时在删除时进行了编辑并取消了删除。坦率地说,这是一种常见的做法。 - GSerg

5

最简单的方法是使用FileSystem.MoveDirectory方法。请确保添加对Microsoft.VisualBasic.dll的引用:

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

问题是将源目录与目标目录合并,MoveDirectory在这种情况下是否有效?我认为MoveDirectory倾向于在目标上创建一个新目录,并且如果目录已经存在,则会引发错误“无法创建文件,因为该文件已经存在”。 - kaushalparik27
1
为什么要相信,如果你可以尝试呢?它将合并目录,因此您最终将获得一个包含所有内容的单个DestDir。 - Yarik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接