2009-07-17 3 views
0

私はthis ReadDirectoryChangesWの実装を使用して、デスクトップの変更を監視しています。私のプログラムは、ファイルがデスクトップ上に作成されたときに小さなプログラムを実行する予定です。ReadDirectoryChangesWは、ショートカットが作成直後に削除されていると考えています

私は、右クリックのコンテキストメニューから新しいショートカットを作成するときに問題が発生します。ReadDirectoryChangesWはファイルが作成されたという通知を受け取りますが、ファイルが削除されたという別の通知を受け取った直後です。私はWindows Vista以降この問題にぶち当たっています。

何が間違っている可能性がありますか? Vistaと7に固有のディレクトリの変更を監視するために使用しなければならない別の機能がありますか?

おかげで、 クリシュナ

+0

どのファイル名が追加され、どのファイル名が削除されるのですか? –

+0

「New Shortcut.lnk」が追加されました。その通知を処理した後、New Shortcut.lnkが削除されたというメッセージが表示されます –

+0

これはなぜ問題ですか?通知は正確ではありませんか? –

答えて

0

私はこの問題を解決することができました。なぜ私はこれらの奇妙なReadDirectyChangesWイベントをすべて得ているのかまだ分かりませんが、私はこの結果を残しています。

ありがとうございました。

0

あなたは任意のフィルタを定義している:あなたは、ショートカットが再作成されて見て(とあなたのフィルタに一致しない)可能性があります。

エクスプローラは固定名のものを作成し、名前を変更する傾向があります。したがって、ReadDirectoryChangesWに複数の変更が表示されます。

追加思考:

注、変更通知とバッファがすべて読み込まれている、複数の通知を含めることができます。

Process Monitorは何時に同時に表示されますか?

+0

申し訳ありませんが、私は少し不明だったと思います。私はショートカットが作成されるのを見るが、作成されているショートカットに関する通知を受け取った後、即座にファイルが削除されたという通知を受け、これは意味をなさない。 この実装は、発生したIO命令を取得するためにGetQueuedCompletionStatusを使用していると思われますが、ReadDirectoryChangesW呼び出しに適用するフィルタを教えてくれるオブジェクトへのポインタを返します。 –

+0

これを拡張しました。しかし、結局、従来のデバッグに代わるものはありません。 'ReadDirectoruChnagesW'のようなAPIを使いにくく誤ったイベントにするのはとても簡単です。コードプロジェクトコードが正しいとは思わないでください。 – Richard

0

Windowsは、.lnkファイルで面白いことをします。そのため、.lnk拡張子が表示されません。 Windows自体が「New Shortcut.lnk」ファイルを見ることができず、「New Shortcut」のみが表示されるため、削除された通知が送信されるのはそのためです。しかし、これはただの理論に過ぎません。

だから私はそれを回避しようとすると、ファイルがまだ存在する場合、ファイル削除通知を無視してください。 .lnkファイルがまだ存在することがわかっていると仮定します:)

関連する問題