Mac 上のいくつかのディレクトリのファイル システム イベントを監視したいと考えています。監視したいディレクトリは実行時に変更される可能性があるため、FSEvents を使用すると、私のアプリは次のようになります。
- コールバックを処理するグローバル コールバック関数を作成します
- フォルダーごとに新しい FSEventStreamRef を作成し、それを上で作成したコールバックに関連付け、変更コールバックをこのフォルダーに関連付けるのに役立つコンテキストを eventStream に追加します。
ほとんどは機能しているように見えますが、コールバックが呼び出され、'eventPaths' 値がコールバックに送信されるときに奇妙なことに気付きました。
たとえば、/Foo と /Bar の StreamRef を作成した場合、/Bar にファイルを追加すると、コールバックがすぐに呼び出されますが、eventPaths は /Foo 内の場所を指し、StreamRef に関連付けられたコンテキストは次のようになります。 /Fooのそれも。
または、/Foo と /Bar を監視していて、/Bar を削除するとします (/Bar の StreamRef を正しく停止して閉じることにより)。/Fee の新しい FSEventStreamRef を作成し、同じコールバックに関連付けます。/Fee を変更してもコールバックは呼び出されませんが、/Foo を変更すると引き続きコールバックが発生します。
オンラインで見た例やドキュメントでは、単一のフォルダーの監視についてのみ説明しています。単一のコールバックを複数の FSEventStreamRef に関連付ける方法に問題がありますか? それは問題ではないように聞こえますが...
誰かが確実に機能する方法で同様のことをしたことがありますか、または私が別の方法で試す可能性のある提案はありますか?
これを実験していたときに私がやろうとしたことの1つは、単一のFSEventStreamRefを使用して、必要なすべてのパスを含むCFArrayRefを渡し、ウォッチリストが変更されたときに新しいFSEventStreamRefを閉じて再作成することです-これはさらに悪いことです上記。