4

特定のフォルダーのすべてのファイル変更を検出したい (データ変更を除く)。System.IO.FileSystemWatcher を使用してそれを管理することにしました。

// 
// fileSysWatchFile
// 
this.fileSysWatchFile.EnableRaisingEvents = true;
this.fileSysWatchFile.IncludeSubdirectories = true;
this.fileSysWatchFile.NotifyFilter = System.IO.NotifyFilters.FileName;
this.fileSysWatchFile.SynchronizingObject = this;
this.fileSysWatchFile.Created += new System.IO.FileSystemEventHandler(this.fileSysWatchFile_Created);
this.fileSysWatchFile.Deleted += new System.IO.FileSystemEventHandler(this.fileSysWatchFile_Deleted);
this.fileSysWatchFile.Renamed += new System.IO.RenamedEventHandler(this.fileSysWatchFile_Renamed);

良い限り... 新しいファイルが検出されます。ファイルの削除が検出されます。ファイルの名前変更が検出されました。

ファイルをサブフォルダーに移動すると、最初にファイルの削除が検出され、次に新しいファイルの作成が検出されます。

パスを除いて、移動は名前の変更と同じであると思います。そうではないようです。保存方法でファイルの移動を検出できますか?

ところで...ファイルの変更のみを検出し、ディレクトリの変更は検出したくありません。

編集:

移動を検出する必要があり、削除、作成に耐えられない理由の追加情報:

他のドライブで同じ変更を再生したい。最初に削除を取得した場合は、シャドウ ファイルを削除します。次に、ファイル作成イベントを取得し、元のファイルはすでに失われています:-(.

したがって、監視対象のドライブであるドライブ A と、同じファイル名のファイルを含むドライブ B があります。

データの変更を除くすべてのファイルの変更は、ドライブ B で再生する必要があります。

4

3 に答える 3

1

ファイル システム フィルター ドライバーを使用して、ファイルの名前変更操作を追跡できます。実際、FS Filter は FileSystemWatcher よりも優れたアプローチです。FileSystemWatcher は、特定のケースでは信頼性と柔軟性を提供しません (FileSystemWatcher に関する多くの質問とその不具合と制限を確認できます)。

FS フィルターを使用すると、要求がファイル システムに到達するとすぐに追跡できます。

独自のフィルター ドライバーを作成するか、CallbackFilter製品を使用できます。

于 2010-11-27T11:34:41.133 に答える
1

ファイル削除/ファイル作成機能は、ファイル移動の背後にあるものです。フォルダーからフォルダーにファイルを移動するだけの場合は名前の変更に似ていますが、あるディスクから別のディスクにファイルを移動したり、マシン間でファイルを移動したりする場合はどうでしょうか。

そして、指定されたフォルダを見ている場合、ファイルがそこにない限り、削除された可能性があります:)

ファイルを移動した「イベント」(監視フォルダーから監視サブフォルダーへ)を確実にキャッチしたい場合は、最近削除されたファイルのリストを維持し、ファイル作成イベントごとに、ファイルがそのリストにあるかどうかを確認します、事実上のファイルの移動を示します。

于 2010-11-27T09:17:06.590 に答える
0

それは問題の本当の解決策ではありませんが、私は素早く汚い解決策を得ることができました:

まず、すべてのイベントをしばらくバッファリングします (100 ミリ秒でテストしましたが、どれだけ速くなるかを確認します)。

イベントがバッファ内で 100 ミリ秒の場合、依存する他のイベントもそこにあるかどうかを確認します。したがって、削除の場合はすべての作成を検索し、作成の場合はすべての削除を検索します。

1 つ見つかったら、2 つのイベントを 1 つの移動イベントだけに置き換えます。

この回避策にはいくつかのリスクがあります:
1.) 削除と作成のどちらが先かは言えません。これは毎回異なるようです
2.) 遅延が短すぎると、ファイルが削除されて失われます :-(

しかし、より良い解決策がない限り、私はこれと一緒に暮らさなければなりません。

于 2010-11-27T15:35:04.597 に答える