電子書籍の厳選無料作品が豊富!

C:\aaa\bbb\ccc.dat というファイルを C:\aaa\ddd に移動したり、eee.dat にリネームした場合に、元の ccc.dat と eee.dat が同一であることを認識したいのですが、バイナリ比較する以外に、パスやファイル名が変わっても不変なIDのようなものはあるのでしょうか?

会社と自宅のPCでディレクトリの同期化を行うツールを作ろうと思っています。ファイル一覧のスナップショットを取っておいて、新規・削除・移動・変更などの差分をフラッシュメモリ等でやり取りする計画なのですが、移動しただけのファイルは「移動した」という情報だけにして、ファイルそのものはフラッシュメモリに入れずにすませたいところです。
パスやファイル名が変わっても不変な、ファイルにとって一意なIDのようなものは無いでしょうか?

Windows2000/XP FAT32/NTFS ツールは.NET/C# で考えています。

ヒントだけでも下されば後は自分で調べますのでよろしくお願いします。

A 回答 (5件)

ファイルのユニークIDは、PlatformSDKで言うところの、


GetFileInformationByHandle で取得する、LPBY_HANDLE_FILE_INFORMATION 構造体の、nFileIndexHigh と nFileIndexLow ですね。
    • good
    • 0

#4です。

書き間違えました。
×LPBY_HANDLE_FILE_INFORMATION構造体
○BY_HANDLE_FILE_INFORMATION構造体
    • good
    • 0

#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はおそらく無理じゃないかな。

参考URL:http://gnuwin32.sourceforge.net/packages.html
    • good
    • 0
この回答へのお礼

このような情報を探していました!
ありがとうございます!!

お礼日時:2005/05/12 09:24

MD5というファイルの同一性の確認に使う手法があります。

ファイルを読み込んで128bitのデータを生成し、それが同一だと同一ファイルだと判断します。

参考URL:http://www.vector.co.jp/soft/win95/util/se136327 …

この回答への補足

ありがとうございます。
MD5はファイルの内容全部を読む必要があるんですよね?

現存する2つのファイルの同一性ではなく、ファイルの所属するディレクトリやファイル名が変わったとしても、C:\aaa\ddd\eee.dat が、前回チェック時のC:\aaa\bbb\ccc.dat であることを認識したいのですが、やはり無理でしょうか・・・

ファイル名やディレクトリが変わっても、HDD上の物理位置は変わっていないわけですから、それを認識するにはファイルシステムを迂回してHDDをローレベルで読むしかないのでしょうか?

補足日時:2005/05/11 21:45
    • good
    • 0

たしか 同じファイルをバイナリレベルで捜す


フリ-ソフトがありました
同等ファイルを見つけて ハ-ドディスクを整理する
ソフトです

申し訳ありませんが 名前は忘れました
    • good
    • 0
この回答へのお礼

ありがとうございます。
目的の用途に使えるものがあるか調べてみます。

お礼日時:2005/05/11 00:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!