【发布时间】:2010-11-26 01:59:57
【问题描述】:
收听文件夹或文件以查看它是否已保存或是否已添加新文件的最佳方法是什么?
【问题讨论】:
标签: objective-c cocoa observer-pattern
收听文件夹或文件以查看它是否已保存或是否已添加新文件的最佳方法是什么?
【问题讨论】:
标签: objective-c cocoa observer-pattern
如果您只想监视目录但不处理单个文件的监视,则 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 中并未正式提供。
【讨论】:
NSOpenPanel(即Powerbox)选择了一个文件夹,那么您应该能够毫无问题地观察它的变化。
尝试使用FSEvents,虽然它是一个 C API
操作系统 10.5 或更新版本
【讨论】:
如果您确实需要使用 kqueue(如其他答案中所述)Google Toolbox for Mac 有一个 nice Objective-C wrapper,到目前为止我使用它没有任何问题。
【讨论】:
如果您要更改文件或文件夹,我相信Spotlight 搜索引擎会更新其数据库以反映您的更改。
因此,您可以设置一个线程,通过特定于该文件或文件夹的Spotlight query 侦听kMDQueryDidUpdateNotification 通知。
当你收到这些通知时,你可以触发一个选择器来做你想做的事情。
【讨论】:
不确定什么是最好的方法,但是一种方法是启动一个 NSThread,它会定期(例如每秒)检查目录中文件的创建日期,然后有一个与该线程关联的委托添加新文件时执行一些操作
【讨论】: