在Cocoa / Cocoa Touch中监控一个目录
我试图找到一种方法来监视目录的内容以进行更改。 我尝试了两种方法。
我遇到的问题是我无法找到检测哪个文件已经改变的方法。 我试图监视一个目录,其中可能有数千个文件,我不想在每个目录上调用stat来找出哪些目录发生了变化。 我也不想为该目录中的每个文件设置单独的调度源。 目前这可能吗?
注意:我已经记录了使用kqueue和GCD监视文件的实验
我的建议就是咬一口,然后在另一个线程中进行目录扫描,即使你在谈论数千个文件。 但是,如果你坚持,这是答案:
没有办法做到这一点,没有卷起袖子去核心潜水。
您的第一个选择是使用FSEvents框架,该框架在创建,编辑或删除文件(以及与属性有关的事情)时发出通知。 概述就在这里,有人在API上编写了一个Objective C包装器,尽管我还没有尝试过。 但是概述没有提到关于文件更改的事件部分,只是目录(就像使用kqueue一样)。 我最终使用这里的代码以及头文件来编译我自己的记录器,我可以使用它来在单个文件级别获取事件。 您必须在应用程序中编写一些代码才能在后台运行记录器并对其进行监控。
或者,看看“fs_usage”命令,该命令会持续监视所有文件系统活动(我的意思是全部)。 这与达尔文已经有了,所以你不必自己编译它。 您可以使用kqueue来侦听目录更改,同时监视“fs_usage”的输出。 如果您从kqueue获得目录已更改的通知,则可以查看fs_usage的输出,查看写入的文件,并根据修改的目录检查文件名。 fs_usage是firehose,所以准备使用一些选项和Grep一起驯服它。
为了让事情更有趣,FSEvents记录器和fs_usage都需要root访问权限,因此您必须先获得用户的授权,然后才能在OS X应用程序中使用它们(请参阅授权服务编程指南了解如何使用做它)。
如果这一切听起来非常复杂,那是因为它。 但至少你不必找出困难的方式!
链接地址: http://www.djcxy.com/p/55399.html上一篇: Monitoring a directory in Cocoa/Cocoa Touch
下一篇: How Facebook and Github change there URL without reloading the page