2011-01-31 15 views
0

私は、ユーザーが変更のために指定するディレクトリーのリストを監視するアプリケーションを必要とするプロジェクトに取り組んでいます。また、ユーザーにアプリケーションをサービスとして実行するか、個別に実行するかを選択できます。ユーザーは個別に実行することを選択できるので、ファイルの追加または削除によって起動されたオペレーティングシステムイベント(このようなイベントが存在する場合)をリッスンするのは十分であるとは思わないと思います。多分、最も深いフォルダのチェックサムを計算してビルドすることを考えました。その後、これらのチェックサムを後続のスキャンで比較して、変更の発生場所を特定して特定することができました。それは適切な解決策でしょうか。効率的にこれを行う最良の方法は何ですか?変更のためのフォルダーの監視

また、私はこれにタグを付けるべきではないと思っています。あなたに何か勧告があれば教えてください。

EDIT:私は、ファイルシステムはCIFS/SMBのPROTCOLをサポートしている場合、あなたはプロトコルの変更通知機能を考慮することができるのWindows、OS X、および理想的にLinux上で

答えて

1

変更を追跡するためのいくつかの方法が存在します。

最も簡単なのは、タイマーでディレクトリをスキャンし、タイムスタンプとファイルサイズを比較することです。しかし、これはリソースを消費し、いくつかの変更が見逃される可能性があります(たとえば、チェックの間にファイルが2回変更された場合、最初の変更は見逃されます)。

次に、FindFirstChangeNotification Windows API関数を使用することができます(ただし、独自の制限があります)。

最も洗練された最も信頼できる方法は、ファイルシステムフィルタドライバを使用することです。 WindowsではCallbackFilterを使用できます。 MacOS Xではフィルタドライバを作成することは可能ですが、CallbackFilterに似た、すぐに使える製品についてはわかりません。 Linuxでは、inotifyを使用できます。

0

man kqueue

(少なくとも、それは私が最もしばしばOSをターゲットに私にそれを行うだろうかだ - しかし、あなたはあなたのポストでこれを指定する必要があります)

2

Mac OSXでは、FSEventを使用できます。これは、Linuxのinotifyインターフェイスに似ています。