-4

編集:詳細を含む質問の編集:

2 つの巨大なフォルダーを比較し、両方のフォルダーでどのファイルが共通しているかを調べています。MSDN には、それを解決するために LINQ を使用するプログラムがあります: 記事MSDN

ただし、修正しようとしている問題があります。

2 つのフォルダーがあるとします。フォルダー A とフォルダー B。FolderA と Folder B には、2 つのサブフォルダー 1 と 2 があります。

  • C:\FolderA\1\a.aspx
  • C:\FolderA\2\b.aspx
  • C:\FolderB\1\a.aspx
  • C:\FolderB\1\b.aspx

a.aspx と b.aspx は、FolderA と FolderB の両方で同一です。ただし、b.aspx は別のサブフォルダーに存在することに注意してください。

現在の結果: C:\FolderA\1\a.aspx C:\FolderA\2\b.aspx

フォルダー構造と一致し、ファイルも同一であるため、結果の一致は C:\FolderA\1\a.aspx になると思います。

FileCompare クラスを変更して、同じディレクトリ構造にあるファイルの比較を実行することはできますか?

または

比較が正しく行われるようにするには、どのような変更を行う必要がありますか。

ありがとう!サンジーブ

4

1 に答える 1

1

これを機能させるには、Equals()関数の動作を調整する必要があります。私の提案は次のとおりです。

ステップ 1 -メソッドpathで変数を使用できるようにします。Equals()

class CompareDirs
    {

        static void Main(string[] args)
        {

            // Create two identical or different temporary folders  
            // on a local drive and change these file paths. 
            string pathA = @"C:\TestDir";
            string pathB = @"C:\TestDir2";
...

になる

class CompareDirs
    {
        private string pathA, pathB;

        static void Main(string[] args)
        {

            // Create two identical or different temporary folders  
            // on a local drive and change these file paths. 
            pathA = @"C:\TestDir";
            pathB = @"C:\TestDir2";
...

ステップ 2 -Equals()この情報を考慮するように方法を変更します。

.replace(pathA, pathB)パスが同じであるかのように、ファイルのディレクトリを比較できるようにするために使用することをお勧めします。したがって、同じサブディレクトリ構造にあるすべてのファイルは、全体的に同じディレクトリになります (置換操作が実行された後)。

    public bool Equals(System.IO.FileInfo f1, System.IO.FileInfo f2)
    {
        return (f1.Name == f2.Name &&
                f1.Length == f2.Length &&
                f1.DirectoryName.replace(pathA, pathB) == f2.DirectoryName.replace(pathA, pathB) );
    }
于 2013-05-09T17:06:47.773 に答える