header
■FileManyトップへ戻る

検索アルゴリズム説明

参考までにFileManyの重複ファイル検索アルゴリズムを説明します。
設定によって途中のプロセスが若干異なりますが基本は同じです。
今後も改良が続きます。

1.検索対象ファイルを全て列挙
    設定で除外されるファイルを除いて
    対象フォルダ以下のすべてのサブフォルダ内の全ファイルを列挙します。
    (ファイル、フォルダへのアクセス拒否やその他エラーは無視して続行)

2.全ファイルをサイズの昇順にSort

3.同じサイズのファイルが2つ以上ないものは候補より除外
    サイズ一致比較までの設定であれば、ここで検索完了

4.ハッシュ作成
    ハッシュ比較、バイナリ比較のいずれかが有効であるとき
    ファイルの先頭1MByteを材料にMD5を作成します。
    (バイナリ比較の場合も、まずはハッシュで比較されます)

    この時、過去既に作成済みのハッシュ値があれば、それを利用しますが
    ファイルの更新日時などが変更されていれば、ハッシュ値を再生成します。

    ※ハッシュ値は、それを作る必要のあるファイルのみ作成されます。
      つまり同じサイズのファイルが2つ以上存在しなければなりません。

5.ハッシュ比較
    サイズが同じファイルのグループ内でハッシュ値による比較を行います。
    バイナリ比較がOFF設定であれば、ここで検索完了

6.1バイト単位で完全一致比較がONであれば全データをバイナリ比較
    1byteも差異のない、完全に一致するファイルをグループ分けします。

    バイナリ比較部分はWin32ネイティブコードで高速。
    更に、比較回数とファイルReadを必要最小限に抑えており
    サイズもハッシュも同じファイルで、何処かが1byteだけ違うファイルを
    1回の検索ですべてグループ分けが可能です。

    比較速度も大切ですが、記憶デバイスへの負担も考慮しています。
ハッシュの記憶について
1度ハッシュを作成したファイルの情報は
Hash.txtファイルに記憶され、次回からの比較に利用されます。

フォーマットは
【ハッシュ文字列】|【サイズ】|【更新時間】|【絶対パス付きファイル名】
の連続です。1ファイル1行です。
■FileManyトップへ戻る




Copyright © 2008.07 - shougo suzaki