1

私の考えは、ファイルシステム上の特定のファイルを2つの時点の間で経時的に追跡することT1ですT2。ここでの重点は、ファイルをファイルシステム上の一意のエンティティとして見ることにあります。データと属性を変更できるが、それでも独自のアイデンティティを維持できるもの。

最終的な目標は、ファイルのデータハッシュと作成/変更属性をでキャプチャして記録し、それらをで同等のものT1と比較することによって、ファイルのデータが(不本意に)変更されたかどうかを判断することです。すべての属性が変更されていないが、ハッシュが検証されない場合は、問題があると言えます。他のすべての場合、変更されたハッシュは変更の結果であり、変更されていないハッシュと変更されていない変更の結果であると言うことをいとわないかもしれません-ファイル(データ)の変更がまったくない結果であると考えてください。T2T1T2

現在、ファイルを参照する方法とそれに対応する欠点がいくつかあります。

  • ファイルへのパス:ただし、ファイルが別の場所に移動された場合、このメソッドは失敗します。
  • file-dataのデータハッシュ:ポインタが別のディレクトリに移動された場合でも、ファイル、または(a)ディスク上のfile-dataへのポインタを見つけることができますが、データは変更できませんまたは、このメソッドも失敗します。

私の考えは、その特定のファイルのfileIdを取得して、でT1ファイルを追跡することですT2。たとえファイルの場所が変更されたとしても、新しいファイルと見なす必要はありません。

私はpywinが提供する2つの方法を知っています。win32file.GetFileInformationByHandle()win32file.GetFileInformationByHandleEx()、しかし、それらは明らかに特定のファイルシステムに制限されており、クロスプラットフォームの互換性を破り、ファイルを追跡するための普遍的なアプローチから離れています。

私の質問は単純です:理想的にはプラットフォーム/ FS全体でファイルを追跡するための他のアイデア/理論はありますか?

ブレーンストーミングされた思考の食べ物は大歓迎です!

4

1 に答える 1

4

ファイルIDの概念は幻想であるため、一般的には実際には実現可能ではありません(物理IDの錯覚に似ていますが、これは哲学フォーラムではありません)。

  1. 内容が変わるため、ファイルの内容を使用してIDを追跡することはできません。

  2. 多くのファイルエディタは古いファイルを削除して新しいファイルを作成することで変更を保存するため、ファイルに添付されている他のプロパティで追跡することはできません。

バージョン管理システムは、これを3つの方法で処理します。

  1. (CVS)移動操作を追跡しないでください。

  2. (Subversion)移動操作を手動で追跡します。

  3. (Git)ヒューリスティックを使用して、ファイルの内容の変更に基づいて操作を「移動」操作としてラベル付けします(たとえば、新しいファイルと既存のファイルの違いが50%未満の場合、コピーとしてラベル付けされます)。

iノード番号のようなもの安定しておらず、信頼されていません。ここで、Vimでファイルを編集すると、iノード番号が変更されることがわかります。これは次のように調べることができますstat -f %i

$ touch file.txt
$ stat -f%i file.txt
4828200
$ vim file.txt
...file.txtに変更を加えます...
$ stat -f%i file.txt
4828218
于 2013-03-27T04:10:20.760 に答える