11

我想监视一个目录(包含数千个文件,大约有 5 级子目录)以了解文件何时更改。我知道我可以使用 FSEvents API 来监视该目录中文件何时更改的目录,但我似乎无法弄清楚如何确定哪些文件已更改。参考建议我构建一棵二叉树并在每次触发事件时遍历树,这是确定哪些文件已更改的最佳方法吗?如果没有,有什么更好的选择?

递归扫描目录并将kqueue附加到每个文件会更好吗?我不确定它对数千个文件的效果如何?

4

2 回答 2

8

我以前使用过UKKQueue,结果好坏参半。

我最近意识到一个更好的解决方案,但我还没有尝试过。如果您只需要定位 Lion,我认为新的最佳实践方法是使用NSFileCoordinator. 您实现的方法NSFilePresenter来指示您对哪个目录感兴趣(presentedItemURL属性),系统会在子项目移动/更改/被删除时通知您(通过类似的方法presentedSubitemDidChangeAtURL:

如果你真的走那条路,我很想听听结果如何。

于 2012-06-27T00:32:02.347 回答
6

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

于 2012-12-06T03:22:10.787 回答