1

同じ xml ファイルを参照する 2 つのアプリケーションがあります。1 つはファイルに書き込み、もう 1 つはファイルへの変更を監視します。

アプリケーション 1 では、FileSystemWatcher を使用して変更を監視し、フィルターを LastWrite として適用し、変更イベントのみを監視しました。バックグラウンドで継続的に実行されます

アプリケーション 2 は、起動時にファイル内の特定のノードを読み取り、ユーザーの指示でノードを更新します。実行時にファイルから値を読み取り、その値を変更する機能を持つ単純な Windows フォームです。

両方のアプリケーションを実行しているときに遭遇した奇妙なことは、アプリケーション 2 の起動時に、アプリケーション 1 でファイル変更イベントが発生することです (注: アプリケーション 1 は継続的にファイルを監視します)。

アプリ 2 起動時にアプリ 1 で発生する change イベントをなくしたい。

フィルターが正しくないか、または Change イベントの動作がおかしくないですか?

4

1 に答える 1

1

この動作は文書化されています:

監視対象のChanged eventディレクトリ内のファイルまたはディレクトリのサイズ、システム属性、最終書き込み時間、最終アクセス時間、またはセキュリティ許可が変更された場合に発生します。

アプリケーション 2 がファイルを開き、OS が最終アクセス時刻を追跡している場合、Changedイベントが発生します。実際にファイルにデータを書き込むイベントのみをフィルタリングする機能はないため、アプリケーション 1 の状態を維持して何が起こったかを判断する必要があります。

たとえば、何が起こっているかがわかったので、最後の書き込み時間のキャッシュを保持し、それが変更されていない場合はイベントを無視することを決定できます。

于 2012-09-19T12:57:15.480 に答える