フォルダまたはファイルを聞いて、保存されているかどうか、または新しいファイルが追加されているかどうかを確認する最良の方法は何ですか?
5 に答える
FSEvents APIは、ディレクトリを監視したいだけで、個々のファイルの監視を処理しない場合に最適です。Stu Connollyには、FSEvents C API用の優れたObjective-Cラッパーがあります。これはSCEventsと呼ばれ、ここで入手できます。
http://stuconnolly.com/blog/scevents-011/
FSEventsの良いところは、1つのフォルダーを監視するだけで、そのフォルダーのサブフォルダー階層のどこかで発生した変更が通知されることです。
ファイルレベルの通知が必要な場合は、kqueuesを使用する必要があります。UliKustererには優れたObjective-Cラッパーがあります。
http://zathras.de/angelweb/sourcecode.htm#UKKQueue
これらの方法はどちらも、C APIを直接使用するよりもはるかに簡単です。これは、特に十分に文書化されておらず、少しわかりにくいものです。
Tigerをサポートする必要がある場合は、FSEvents APIが10.4で正式に利用できなかったため、kqueuesを使用する必要があります。
C API ですが、FSEventsを使用してみてください
OS 10.5 以降
kqueue を使用する必要がある場合 (他の回答で説明されているように)、Google Toolbox for Mac には、これまで問題なく使用してきた優れたObjective-C ラッパーがあります。
ファイルまたはフォルダを変更する場合、Spotlight検索エンジンはデータベースを更新して変更を反映すると思います。
そのため、そのファイルまたはフォルダーに固有のSpotlight クエリを介してkMDQueryDidUpdateNotification通知をリッスンするスレッドを設定できます。
これらの通知を受け取ると、必要なことを行うセレクターを起動できます。
何が最善の方法かはわかりませんが、ディレクトリ内のファイルの作成日を定期的に (たとえば毎秒) チェックする NSThread を起動し、そのスレッドに関連付けられたデリゲートを使用して何らかのアクションを実行する方法があります。新しいファイルが追加されたとき