Home

DHFiND (重複ファイル検索ソフトウェア/ duplicated hash file search software)

for Windows2000, Windows XP

download version 000h3 (2011.08.24)

以前の version 000d を使用していた場合は Database フォルダ内のファイルを全て削除してから使用してください.
(full_path がプライマリーキーとしてテーブルが作成されないので,検索速度が大幅に低下するバグがあります).

主要な修正事項 / lasted main fix. check.

他の製作者の重複ファイル検索ソフトはこちら


・DHFiND メイン画面.


0) 概要 / Overview

DHFiND はローカルコンピュータ内に保存されたファイルから,重複ファイル (同じハッシュ (SHA1) 値を持つファイル) を検出する Windows 用ソフトウェアです. 検索ファイルに対してデータベースを作成するため, 2 度目以降の検索を高速にすることができます.

Notice: 高速性に対して以下のような欠点があります.

これらの欠点が気になる場合は,削除前に "Compare >>" ボタンを押してファイルの完全比較を行って下さい.



1) 仕様 / Specification


2) インストール / アンインストール (Install / Uninstall)

・インストール:

zip ファイルを適当なフォルダに解凍して 「DHFiND.exe」 を起動してください.


・アンインストール:

レジストリは使用しません.フォルダごと削除してください.



3) 使い方 / How to use

「フォルダ追加 ...」 にてフォルダを指定し「スレッド開始 >>」ボタンを押して検索を開始します.検索設定ダイアログが開くので,デフォルト設定で検索を行う場合はそのまま [OK] ボタンを押します.




・メイン画面操作

"Safe" に指定したフォルダ以下のファイルは,自動選択でチェックは付かず,手動でチェックをつけても "Delete" ボタンで削除されません.



スレッドモード



4) 設定ファイル DHFiND.ini (config ダイアログで全て設定可能です)




- DHFiND.ini
SmartViewer=$Enable[tab]$ViewerPath
[EOF]

SmartViewer

$Enable は 0 (無効) か 1 (有効) を指定.$ViewerPath は SmartViewer のパスを指定.結果リストでマウスホバー時に,そのファイルのパスが SmartViewer にコマンドライン引数で送られます (SmartViewer.exe $FilePath).また DHFiND 終了時に終了メッセージが送られます (SmartViewer.exe /close).



・ 簡易ビューア (SmartViewer) 仕様

結果リストでのマウスホバー時にコマンドライン引数を通じてファイルパスが送られる (SmartViewer.exe $FilePath) ので,そのファイルの内容を表示して下さい.また DHFiND 終了時に SmartViewer.exe /close が送られるので,終了して下さい.







5) memo

・ 動作解説

ファイルを全て取り込んだ後で,ファイルサイズでソートし,同じファイルサイズで一時グループを作ります.この一時グループ内のファイルの SHA1 値をすべて算出し, SHA1 値でソートした後,SHA1 値が同じファイル範囲を切り出してグループを作成します.
SHA1 算出をする時,まずデータベースから full_path, file_size, create_time, last_write_time が同一なファイルを検索し,もし存在すればデータベースの content_hash をそのファイルの SHA1 値として扱います.存在しなかった場合は検索されたファイルから SHA1 値を算出し,データベースに登録します.

・開発目標

  1. Undup like + database による高速化実験. (complete)
  2. database 情報のみからの重複ハッシュ検索. (complete)
  3. 1000 万 over 検索実験 (やらないかも). (progress..)
    1. 検索されたファイルを content_hash を除いてデータベースに登録(テーブル1)
    2. 重複サイズを検索し全ての content_hash を算出(算出した後でデータベース(テーブル3)に登録し,これもキャッシュ的に利用)してデータベースに登録(テーブル2)
    3. 重複 content_hash を検索.
  4. 指定フォルダ監視によるデータベースの自動更新. (pending)

    指定フォルダのファイルの更新を監視
    test (監視のみ)
  5. 指定ドライブを個別にデータベースファイル化し,フォルダ指定に使用できるようにする.(CD,DVD等) (complete?)
  6. 仮想リストビューでメモリを大幅に節約する. (チェックボックスが使用できなくなるので代替策を用意する) (complete)
  7. リソースを外部 DLL に持たせる.(progress..)




・検索速度 memo

132.7万ファイル (377 GB) のファイル群を通常の「重複ファイル検索 (Normal)」で default 処理した場合,データベースが空の場合処理終了まで 22 時間ほどかかった.このときの検索途中のメモリ使用量は約 1 GB 程.この状態から 3500 ファイルほどの新規ファイルをフォルダ以下に追加して「重複ファイル検索 (Normal)」を行った場合(約130万ファイルがデータベースに登録あり,3500ファイルがデータベースにない状態),処理終了まで 70 分ほどかかった.
検索結果 16万 Group, 40万 File くらいの結果を保存するのにかかる時間は約 1 min 30 min, 読み込み時間は約 1 min,データベースファイルサイズは約 155 MB.




・資料
MD5 Collision Demo http://www.mscs.dal.ca/~selinger/md5collision/
SHA1 collision demo / example (There is no known collision for SHA-1 yet. Right now)http://stackoverflow.com/questions/3475648/sha1-collision-demo-example




・ データベースの構造

・NFileHashDatabase データベース

- NFileSQL.db
テーブル名 file_info_sha1, カラム名 full_path, content_hash, file_size, create_time, last_write_time, drive, dir, file_name, ext
full_path : ファイルのフルパス(primary key)
content_hash : ファイル内容の SHA1 値
file_size : ファイルサイズ(byte)
create_time : ファイル作成時間.FILETIME 秒数 (1601 年 1 月 1 日からの 100 ナノ秒単位).
last_write_time : ファイル更新時間.FILETIME 秒数 (1601 年 1 月 1 日からの 100 ナノ秒単位).
drive : フルパスの内 Drive
dir : フルパスの内 Dir
file_name : フルパスの内 FileName(拡張子を含まない)
ext : フルパスの内 Ext (拡張子, ドット含む (例: .txt, .exe, .jpg ) )

index: idx_content_hash, idx_file_size, idx_create_time, idx_last_write_time, idx_drive, idx_dir, idx_file_name, idx_ext

# 将来的に file_id および volume カラムが追加されるかもしれません.
# データベースファイルの大きさは,約 100 万ファイルで 720 MB 位になります.
# ResultDatabase にはインデックスが無く, full_path もプライマリーキーではありません.また, file_id カラムが追加されています.


・更新履歴 (主要な修正事項)/ lasted main fix.

・他の重複ファイル検索ソフト(外部リンク:リンク先はこのサイトとは無関係です)
# FileMany, UnDup, SDF Mach が非常に速く,削除機能が使いやすくてお勧めです.


・既知のバグ


・検討課題
  1. 拡張子フィルタ.(complete)
  2. ファイルを完全比較する option (PostCompare).(complete)
  3. マウスホバー時に簡易ビューア.(complete)
  4. SQL検索用index.(complete)
  5. DB only 検索用基底フォルダ指定.(complete)
  6. 結果の保存とロード.(complete)
  7. ハッシュ強度(MD5,SHA1,SHA256)と速度.(complete)
  8. 正式なソフトウェア名を決める (RGS, LSDD, DHFiND or ...).(complete)
  9. 奇数・偶数グループのリストの色を変更 (complete)
  10. 無視フォルダを指定 (complete)
  11. SQLdatabase 内部文字列を UTF-8, or UTF-16 にする. (maybe)
  12. ネットワークドライブへの対応 (maybe)
  13. table に volume, file_id カラム追加.(pending)
  14. database を DLL にする(抽象化).(pending)


6) その他 / Others