2012-01-29 140 views
5

我有一个autoupdater C#程序。它会下载一个rar文件,该文件将更新后的文件或新文件保存到一些软件中。 rar文件的结构就像软件的基本目录一样,但只包含已更改或新的文件/文件夹。有没有简单的方法来“合并”这些文件/文件夹到目的地目录,因为如果文件/文件夹已经存在,它会被替换,如果不是,它会被添加或我必须手动遍历每个文件/文件夹,并自己做这个?只是希望有是.NET具有:)C#将一个目录与另一个目录合并

回答

19

DirectoryInfo Class

下面的例子演示了如何复制目录及其内容一个不错的合并功能。

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

想知道为什么你的帖子没有显示给我,当我自己写一个? – 2012-01-29 13:52:56

+1

@FelixK。我发布了一个答案,然后我认为这不是正确的,删除​​了它,在删除和删除时进行了编辑。坦率地说,这是一种常见的做法。 – GSerg 2012-01-29 13:54:57

+0

嘿,谢谢你队友 – 2013-05-14 14:08:19

1

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

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

问题是合并源目录和目标目录,MoveDirectory会在这种情况下工作吗?我相信MoveDirectory倾向于在目标上创建一个新目录,并且如果目录已经存在,将会引发一个错误“如果该文件已经存在,就不能创建文件”。 – kaushalparik27 2017-03-31 14:22:44

+1

为什么相信你可以试试?它会合并这些目录,所以你最终会得到一个单一的DestDir,其中包含所有内容。 – Yarik 2017-03-31 14:35:22

相关问题