我希望在更改文件时监视一个目录(数千个文件,大约有5个子目录级别)。我知道我可以使用FSEvents API监视目录,以便在该目录中更改文件,但我似乎无法弄清楚如何确定哪些文件发生了变化。 This参考建议我在每次触发事件时构建二叉树并遍历树,是否最佳方式确定哪些文件已更改?如果没有,那些更好的替代品是什么?
以递归方式扫描目录并将kqueue附加到每个文件是否更好?我不确定这对成千上万的文件有多好?
答案 0 :(得分:8)
我之前使用过UKKQueue混合结果。
我最近意识到了一个更好的解决方案,但我没有尝试过。如果您只需要定位Lion,我认为执行此操作的新的最佳实践方法是使用NSFileCoordinator
。您实现NSFilePresenter
的方法以指示您感兴趣的目录(presentedItemURL
属性),系统将在子项移动/更改/删除时通知您(通过{{{{{ 1}})
如果你走那条路,我很想知道这是怎么回事。
答案 1 :(得分:6)
如果使用 kFSEventStreamCreateFlagFileEvents 创建流,那么您将获得每个文件更改的事件,而不仅仅是对已监视目录的更改的通知。不幸的是,这仅适用于OSX 10.7及更高版本。