我正在试图找到一种方法来监视目录的内容以进行更改。我试过两种方法。
我遇到的问题是,我无法找到检测哪个文件已经更改的方法。我试图监视一个目录,其中可能有数千个文件,我不想调用stat对每一个文件,以了解哪些改变了。我也不希望为该目录中的每个文件设置单独的调度源。这是目前的可能吗?
注意:我已经用kqueue和GCD记录了我的实验监控文件。
发布于 2011-10-23 19:52:33
我的建议是,只要咬紧牙关,在另一个线程中进行目录扫描,即使您谈论的是数千个文件。但如果你坚持的话,答案是:
如果不卷起袖子和去跳伞,就无法做到这一点。
第一个选项是使用FSEvents框架,它在创建、编辑或删除文件时发出通知(以及与属性相关的内容)。概述是这里,有人围绕目标C包装编写了一个目标C包装,尽管我还没有尝试过。但是概述没有提到与文件更改相关的事件,只提到目录(比如kqueue)。最后,我使用了来自这里的代码以及头文件这里来编译我自己的记录器,我可以用它来获取单个文件级别的事件。您必须在应用程序中编写一些代码才能在后台运行记录器并对其进行监视。
或者,查看"用法“命令,它经常监视所有文件系统活动(我指的是所有文件系统活动)。这已经和达尔文一起出现了,所以你不需要自己编译它。您可以使用kqueue侦听目录更改,同时监视"用法“的输出。如果您从kqueue收到一个目录已更改的通知,您可以查看fs_usage的输出,查看哪些文件被写入,并根据修改的目录检查文件名。fs_usage是一个消防软管,所以准备使用一些选项与Grep一起来驯服它。
为了让事情变得更有趣,您的FSEvents记录器和fs_usage都需要根访问,所以您必须获得用户的授权才能在OS应用程序中使用它们(有关如何使用的信息,请查看授权服务编程指南 )。
如果这一切听起来都很复杂,那是因为它是。但至少你不需要找出困难的方法!
https://stackoverflow.com/questions/7720246
复制相似问题