11

ファイルがいつ変更されるかについて、ディレクトリ (数千のファイル、約 5 レベルのサブディレクトリ) を監視したいと考えています。FSEvents API を使用して、そのディレクトリ内でファイルが変更されたときにディレクトリを監視できることはわかっていますが、変更されたファイルを特定する方法がわかりません。この参照は、バイナリ ツリーを構築し、イベントがトリガーされるたびにツリーをトラバースすることを示唆していますが、どのファイルが変更されたかを判断する最善の方法ですか? そうでない場合、より良い代替手段は何ですか?

ディレクトリを再帰的にスキャンし、すべてのファイルに kqueue を添付する方がよいでしょうか? それが何千ものファイルでどれだけうまくいくかわかりませんか?

4

2 に答える 2

8

以前にUKKQueueを使用したことがありますが、結果はまちまちです。

私は最近、より良い解決策に気づきましたが、これを試していません。Lion のみをターゲットにする必要がある場合、これを行うための新しいベスト プラクティスは、NSFileCoordinator. NSFilePresenter関心のあるディレクトリ (プロパティ) を示すメソッドを実装するpresentedItemURLと、サブアイテムが移動/変更/削除されたときにシステムが通知します (のようなメソッドを介してpresentedSubitemDidChangeAtURL:)

もしあなたがその道を行くなら、それがどのように機能するかを聞きたいです.

于 2012-06-27T00:32:02.347 に答える
6

kFSEventStreamCreateFlagFileEventsを使用してストリームを作成すると、監視対象ディレクトリへの変更の通知だけでなく、各ファイルへの変更に関するイベントが取得されます。残念ながら、これはOSX10.7以降でのみ使用できます。

于 2012-12-06T03:22:10.787 に答える