监视文件更改的目录

时间:2012-06-26 20:43:18

标签: cocoa osx-lion fsevents kqueue

我希望在更改文件时监视一个目录(数千个文件,大约有5个子目录级别)。我知道我可以使用FSEvents API监视目录,以便在该目录中更改文件,但我似乎无法弄清楚如何确定哪些文件发生了变化。 This参考建议我在每次触发事件时构建二叉树并遍历树,是否最佳方式确定哪些文件已更改?如果没有,那些更好的替代品是什么?

以递归方式扫描目录并将kqueue附加到每个文件是否更好?我不确定这对成千上万的文件有多好?

2 个答案:

答案 0 :(得分:8)

我之前使用过UKKQueue混合结果。

我最近意识到了一个更好的解决方案,但我没有尝试过。如果您只需要定位Lion,我认为执行此操作的新的最佳实践方法是使用NSFileCoordinator。您实现NSFilePresenter的方法以指示您感兴趣的目录(presentedItemURL属性),系统将在子项移动/更改/删除时通知您(通过{{{{{ 1}})

如果你走那条路,我很想知道这是怎么回事。

答案 1 :(得分:6)

如果使用 kFSEventStreamCreateFlagFileEvents 创建流,那么您将获得每个文件更改的事件,而不仅仅是对已监视目录的更改的通知。不幸的是,这仅适用于OSX 10.7及更高版本。