- ベストアンサー
ファイルの同一性を判定するIDのようなものはありませんか
C:\aaa\bbb\ccc.dat というファイルを C:\aaa\ddd に移動したり、eee.dat にリネームした場合に、元の ccc.dat と eee.dat が同一であることを認識したいのですが、バイナリ比較する以外に、パスやファイル名が変わっても不変なIDのようなものはあるのでしょうか? 会社と自宅のPCでディレクトリの同期化を行うツールを作ろうと思っています。ファイル一覧のスナップショットを取っておいて、新規・削除・移動・変更などの差分をフラッシュメモリ等でやり取りする計画なのですが、移動しただけのファイルは「移動した」という情報だけにして、ファイルそのものはフラッシュメモリに入れずにすませたいところです。 パスやファイル名が変わっても不変な、ファイルにとって一意なIDのようなものは無いでしょうか? Windows2000/XP FAT32/NTFS ツールは.NET/C# で考えています。 ヒントだけでも下されば後は自分で調べますのでよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ファイルのユニークIDは、PlatformSDKで言うところの、 GetFileInformationByHandle で取得する、LPBY_HANDLE_FILE_INFORMATION 構造体の、nFileIndexHigh と nFileIndexLow ですね。
その他の回答 (4)
#4です。書き間違えました。 ×LPBY_HANDLE_FILE_INFORMATION構造体 ○BY_HANDLE_FILE_INFORMATION構造体
- notnot
- ベストアンサー率47% (4900/10359)
#2です。 >現存する2つのファイルの同一性ではなく、ファイルの所属するディレクトリやファイル名が変わったとしても、C:\aaa\ddd\eee.dat が、前回チェック時のC:\aaa\bbb\ccc.dat であることを認識したいのですが、やはり無理でしょうか・・・ なるほど。そういう意味でしたか。unix/linuxのi-node番号のようなものですね。 gnuwin32のツール(下記URL)のCoreUtilsを使っているのですが、これに含まれる ls.exe コマンドで 「ls -i ファイル名」とすると、ファイル名に対応した数字が表示されますが、NTFSの同一ドライブ内でのmoveコマンドやrenコマンド、またはexploreでの移動・リネームに対しては数字は不変のようです。FAT32だとリネームでは不変だけど、移動は駄目みたいです(数字が変わる)。XPで確認しました。また、テストしてませんが、いくらNTFSでもドライブをまたがった移動では無理でしょう。 NTFSについてはこのツールのソースを調べるかNTFSの仕様を調べるとよいかと思います。FAT32はおそらく無理じゃないかな。
- notnot
- ベストアンサー率47% (4900/10359)
MD5というファイルの同一性の確認に使う手法があります。ファイルを読み込んで128bitのデータを生成し、それが同一だと同一ファイルだと判断します。
補足
ありがとうございます。 MD5はファイルの内容全部を読む必要があるんですよね? 現存する2つのファイルの同一性ではなく、ファイルの所属するディレクトリやファイル名が変わったとしても、C:\aaa\ddd\eee.dat が、前回チェック時のC:\aaa\bbb\ccc.dat であることを認識したいのですが、やはり無理でしょうか・・・ ファイル名やディレクトリが変わっても、HDD上の物理位置は変わっていないわけですから、それを認識するにはファイルシステムを迂回してHDDをローレベルで読むしかないのでしょうか?
- kvm
- ベストアンサー率19% (123/617)
たしか 同じファイルをバイナリレベルで捜す フリ-ソフトがありました 同等ファイルを見つけて ハ-ドディスクを整理する ソフトです 申し訳ありませんが 名前は忘れました
お礼
ありがとうございます。 目的の用途に使えるものがあるか調べてみます。
お礼
このような情報を探していました! ありがとうございます!!