7

ディスク内のファイル間の関係を追跡するアプリケーションを作成したいだけです。

FileSystemWatcher は、ファイルの作成、名前変更、または削除時にイベントを起動できることがわかっています。

しかし、FileSystemWatcher はソース ファイルのパスを教えてくれません。

たとえば、 にファイルF1があり、という名前の別のフォルダfolder1にコピーするとします。新しいファイル名は. この場合、は に新しいファイルが作成されたことを通知します。しかし、この情報が必要なものである一方で、 new がinからコピーされたことを伝えることはできません。F1folder2F1FileSystemWatcherfolder2F1F1folder1

何かご意見は?

4

2 に答える 2

3

これは、ファイルシステムに関しては、「ファイルのコピー」などの操作がないためです。

ファイルコピーコマンドを実行すると、実際に古いファイルが開き、新しいファイルが作成され、コンテンツがメモリに読み込まれ、新しいファイルに書き込まれてから、両方が閉じられます。ファイルシステムが認識するのは書き込みだけです。データが実際に変更なしで別のファイルからのものであると判断するための汚染追跡システムはありません。

ファイルのコピーを通常のファイルへのデータの書き込みと区別する最後のステップは、宛先のメタデータがソースと一致するように変更されることです。しかし、繰り返しになりますが、ファイルシステムは、属性を変更する理由や、属性を2つ一致させるファイルを認識していません。

ファイルシステムには、リンクとリンク解除についての特別な認識しかありません。したがって、「コンテンツへの2番目のリンクを作成し、最初のリンクを削除する」で構成される移動は検出可能です。コピーが「コピーオンライト用にマークされた新しいリンクを作成する」として実装された場合、それを発見できますが、コピーオンライトはあまり一般的なファイルシステム機能ではありません。

于 2013-03-21T16:55:21.383 に答える
0

問題は、フォルダ「f1」に対してコピーイベントが発生しないことです。

フォルダー1のファイル監視をトリガーするのは、ファイルの更新、他のディレクトリから「f1」へのファイルのコピー、またはファイルの削除です。

「f1」で2つのファイルを使用してみることができます..同時にファイルを「f2」にコピーすると、2番目のファイルを更新できるため、更新イベントハンドラーがトリガーされます........

お役に立てれば....

于 2013-03-21T16:51:51.723 に答える