2012-01-29 4 views
5

私はオートアップデート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

私は1つを自分で書くとき、あなたのポストが私に示されていない理由を疑問に思います? –

+1

@FelixK。私は答えを掲示し、それは正しいものではないと思った、それを削除し、削除され、削除されていない間に編集されました。率直なことに、一般的な習慣。 – GSerg

+0

こんにちは、あなたが仲間をありがとう –

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

+1

あなたが試してみるとなぜ信じるのですか?それはディレクトリをマージするので、すべてのコンテンツを結合した単一のDestDirになります。 – Yarik

関連する問題