监视Cocoa/Cocoa Touch中的目录

DHa*_*ick 9 iphone cocoa cocoa-touch ios

我试图找到一种方法来监视目录的内容以进行更改.我尝试了两种方法.

  1. 使用kqueue监视目录
  2. 使用GCD监视目录

我遇到的问题是我找不到检测哪个文件已更改的方法.我试图监视一个目录中可能有数千个文件,我不想在每个目录上调用stat来找出哪些文件发生了变化.我也不想为该目录中的每个文件设置单独的调度源.这目前可能吗?

注意:我已经记录了使用kqueueGCD监视文件的实验

sgr*_*454 7

我的建议是咬住子弹并在另一个线程中进行目录扫描,即使你在谈论成千上万的文件.但如果你坚持,这就是答案:

如果不卷起袖子进行内核潜水,就没有办法做到这一点.

您的第一个选择是使用FSEvents框架,该框架在创建,编辑或删除文件时发送通知(以及与属性有关的事情).概述在这里,并且有人围绕API 编写了一个Objective C包装器,尽管我还没有尝试过.但是概述没有提到关于文件更改的事件的部分,只是目录(比如kqueue).我结束了使用从代码这里沿头文件在这里编译我自己的记录,我可以用它来获取各个独立的文件级别的事件.您必须在应用程序中编写一些代码才能在后台运行记录器并对其进行监控.

或者,看看" fs_usage "命令,它持续监视所有文件系统活动(我的意思是全部).这已经有了Darwin,所以你不必自己编译.您可以使用kqueue监听目录更改,同时监视" fs_usage " 的输出.如果从kqueue收到目录已更改的通知,则可以查看fs_usage的输出,查看写入的文件,并根据修改的目录检查文件名.fs_usage是一个firehose,所以准备好与Grep一起使用一些选项来驯服它.

为了让事情变得更有趣,您的FSEvents记录器和fs_usage都需要root访问权限,因此您必须先获得用户的授权才能在OS X应用程序中使用它们(有关如何使用的信息,请查看" 授权服务编程指南").做它).

如果这听起来非常复杂,那就是因为它.但至少你没有找到困难的方法!

  • iOS上有FSEvents吗?iOS程序可以运行像fs_usage这样的任意命令吗? (3认同)