0

ファイルシステムに保存されているファイルを追跡して使用するアプリケーションに取り組んでいます。ユーザーは、ファイル システム内のファイルを開いたり、作成したり、削除したり、移動したりできます。その間、私のアプリケーションは常に実行されているわけではないため、すべての変更をリアルタイムで追跡することはできません。その後、私のアプリケーションは、どのファイルが誰であるかを見つける必要があります (私のアプリケーションで識別される ic)。

ユーザーにとって最も好ましい解決策は、アプリケーションがすべての変更を解決することです。各ユーザーの操作はあまり優先されません。

私のアイデアの 1 つは、ファイルの属性を使用してキー値を割り当てることでした。これにより、ファイルが一度識別されると、後でいつでも認識できるようになります。しかし、そのような属性があるかどうかはわかりません。この記事はあまり希望を与えませんでした: Windows ファイル システムには、各ファイルに対して事前に計算されたハッシュがありますか? .

私が使用できるそのような属性があるかどうか誰かが知っていますか? また、C# でどのように使用できますか?

この問題に直面している人はいますか? そして、どのように解決しましたか?

良い提案を聞きたいです。

よろしく、 ジャープ

4

2 に答える 2

2

ファイルが NTFS を離れない場合は、ファイルと共にデータを保存できる代替データ ストリームによって簡単に実現できます。これは ADS に関する多かれ少なかれ良い記事です: http://www.flexhex.com/docs/articles/alternate-streams.phtml

もう 1 つの適切な方法があります。これは非常に効率的ですが、使用が非常に複雑であり、NTFS 内部についての十分な知識が必要です - USN Change Journal; http://msdn.microsoft.com/en-us/library/windows/desktop/aa363798.aspxを参照してください。USN 変更ジャーナルを使用すると、指定された期間内に変更されたすべてのファイル (すべての変更イベントも含む) を非常に効率的に「取得」できます。

それにもかかわらず、ファイルが NTFS 領域を離れる場合、たとえば FAT32 にコピーされた場合、ADS の内容は失われます。

于 2012-08-31T21:17:50.683 に答える
1

ファイル属性に依存することは、プログラムが実行されていないときに一部のユーザーが属性を変更できるという点で「危険」です。これにより、特定のファイルが実際には追跡されていないのに、プログラムによって追跡されている (または追跡されていない) と信じるようになる可能性があります。

データベース、XML、またはその他のファイルでファイルを追跡することをお勧めします。アプリケーションが起動したら、ファイル/データベースを読み取り、新しい/削除/編集されたファイルを確認します。

ファイルのハッシュを保存して、ファイルが移動/編集されたかどうかを確認できます。移動および編集されたファイルを追跡することは、かなり困難になります。(どうすれば達成できるかわかりません)

PS: アプリケーションを Windows サービスにすることを検討しましたか? アプリケーションの GUI 部分が実行されているかどうかに関係なく、ファイル管理をバックグラウンドで実行していますか?

于 2012-08-31T14:12:16.887 に答える