监视文件更改的目录

v0i*_*ess 11 cocoa fsevents kqueue osx-lion

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

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

Jes*_*sak 8

我之前使用过UKKQueue,结果好坏参半.

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

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


hva*_*rug 6

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