收听文件夹或文件以查看它是否已保存或是否已添加新文件的最佳方法是什么?
5 回答
如果您只想监视目录但不处理单个文件的监视,则 FSEvents API 是理想的选择。Stu Connolly 为 FSEvents C API 提供了一个很棒的 Objective-C 包装器,它被称为 SCEvents,你可以在这里获得它:
http://stuconnolly.com/blog/scevents-011/
FSEvents 的好处是您只需要查看一个文件夹,并且您将收到该文件夹的子文件夹层次结构中任何位置发生的任何更改的通知。
如果您需要文件级通知,则需要使用 kqueue。Uli Kusterer 有一个很棒的 Objective-C 包装器:
http://zathras.de/angelweb/sourcecode.htm#UKKQueue
这两种方法中的任何一种都比直接使用 C API 容易得多,C API 没有特别好的文档并且有点迟钝。
如果您需要支持 Tiger,则需要使用 kqueue,因为 FSEvents API 在 10.4 中并未正式提供。
尝试使用FSEvents,虽然它是一个 C API
操作系统 10.5 或更新版本
如果您确实需要使用 kqueue(如其他答案中所述)Google Toolbox for Mac 有一个不错的 Objective-C 包装器,到目前为止我使用它没有任何问题。
如果您要更改文件或文件夹,我相信Spotlight搜索引擎会更新其数据库以反映您的更改。
因此,您可以设置一个线程,通过特定于该文件或文件夹的Spotlight 查询来侦听kMDQueryDidUpdateNotification通知。
当你收到这些通知时,你可以触发一个选择器来做你想做的事情。
不知道什么是最好的方法,但一种方法是启动一个 NSThread,它会定期(例如每秒)检查目录中文件的创建日期,然后有一个与该线程关联的委托来执行一些操作添加新文件时