FindFirstChangeNotification は、Windows 上のファイル システム変更通知に使用する最適な API ですか?
-
08-06-2019 - |
質問
私は Windows プログラミングの初心者で、ファイル システムに対するすべての変更の通知を取得しようとしています (SysInternals の FileMon が表示する情報と似ていますが、API を介して)。各 (非ネットワーク、非置換) ドライブの FindFirstChangeNotification が最善の策でしょうか、それとも他のより適切な C/C++ API はありますか?
解決
FindFirstChangeNotification
それは問題ありませんが、もう少し究極のパワーを得るには、使用する必要があります ReadDirectoryChangesW.
(実際、ドキュメントでも推奨されています。)
関数ポインターは必要ありません。生のバッファーを手動でデコードする必要があり、Unicode ファイル名を使用しますが、一般的にはより優れており、より柔軟です。
一方、FileMon と同じことをしたい場合は、おそらく FileMon と同じことをして使用する必要があります。 ファイル システム フィルターを作成してインストールするための IFS.
他のヒント
他にも方法はありますが、そのほとんどはユーザー側の努力が必要です (アプリのパフォーマンスを奪う、またはスレッドを使用するにはスレッドをブロックする必要があるなど)。FindFirstChangeNotification は、関数ポインターなどの処理に慣れていない場合は少し複雑ですが、作業の大部分を OS に実行させるという利点があります。
実際、FileSystemWatcher は共有ネットワーク ドライブで完全に動作します。私は現在、特にファイルシステムの変更を監視するアプリケーションでこれを使用しています。(www.tabbles.net)。
FileSystemWatcherクラスを利用することができます。非常に効率的ですが、ネットワーク共有ドライブでは動作しません。