3

問題は次のとおりです。Win32 API ReadDirectoryChangesW関数を使用してディレクトリを監視しています。また、新しく作成されたファイルと変更されたファイルを区別する必要があります。しかし、問題があります... いつものように:(

ケース:

  1. 新規/変更 ​​( ) のディレクトリを監視しFILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_SIZEます。問題:ファイルの作成後、新しいファイル イベント + ファイルの変更イベントがトリガーされます。しかし、私は1つだけ必要です。どうすればそれを回避できますか? ファイルが変更されると、必要なものが得られます:)。
  2. 新しいファイル ( FILE_NOTIFY_CHANGE_FILE_NAME) のディレクトリのみを監視しています - 問題ありません。
  3. 変更ファイル ( ) のディレクトリのみを監視しますFILE_NOTIFY_CHANGE_SIZE問題:新しいファイルが作成されると、変更アクションがファイル作成イベントと共に起動されます。どうすればそれを回避できますか?

もちろん、いくつかの回避策を実装しました。しかし、私が説明した問題を処理するエレガントな方法があるかどうか知りたいです。

4

1 に答える 1

4

FILE_NOTIFY_CHANGE_LAST_WRITE変更されたファイルをキャッチするのではなく、キャッチする必要がありFILE_NOTIFY_CHANGE_SIZEます。サイズを変更せずにファイルを変更できます。

また、変更のキューとそれらが発生した時刻を保持し、過去1〜2秒間に変更がなかった後にのみキューを処理する必要があります。一部のアプリケーションは、ファイルを作成または変更するときに非常に奇妙なことを行う可能性があります。このコードを実際に使用する予定がある場合は、一般的なアプリケーションに特別なケースを使用することをお勧めします。

ReadDirectoryChangesは最もフレンドリーなwinapi関数の1つではありません。おそらく、ファイルの作成時に2つのイベントを受信することを回避することはできません。作成時に追加の変更を加えるかどうかは完全にはわかりませんが、FILE_NOTIFY_CHANGE_LAST_WRITEおそらくそうなると思います。キューアプローチを使用すると、作成イベントと同じタイムスタンプがある場合、追加のイベントを簡単に破棄できます。

于 2010-10-20T23:33:29.663 に答える