我想监视 mac 上几个目录的文件系统事件。我要监视的目录可能会在运行时发生变化,因此使用 FSEvents 这是我的应用程序所做的:
- 创建一个全局回调函数来处理回调
- 为每个文件夹创建一个新的 FSEventStreamRef,将其与上面创建的回调相关联,并向 eventStream 添加一个上下文,以帮助我将更改回调与此文件夹相关联
东西似乎大部分都有效,但我注意到在调用回调和将“eventPaths”值发送到回调时有些奇怪。
例如,如果我为 /Foo 和 /Bar 创建了 StreamRefs,如果我在 /Bar 中添加一个文件,我的回调几乎会立即被调用,但 eventPaths 指向 /Foo 中的一个位置,并且我与 StreamRef 关联的上下文是也是 /Foo 的。
或者,假设我正在监视 /Foo 和 /Bar,然后删除 /Bar(通过正确停止和关闭 /Bar 的 StreamRef)。我现在为 /Fee 创建一个新的 FSEventStreamRef 并与同一个回调关联。我对 /Fee 所做的任何更改都不会导致调用回调,但对 /Foo 的更改会继续引发回调。
我在网上看到的任何示例或文档都只讨论监视单个文件夹。我如何将单个回调与多个 FSEventStreamRefs 关联起来有什么问题吗?听起来这应该不是问题……
有没有人以可靠的方式做过类似的事情,或者对我可能会尝试不同的方法有什么建议?
我在试验时尝试做的一件事是使用单个 FSEventStreamRef 并通过我想要的所有路径向它传递一个 CFArrayRef,当我的监视列表更改关闭并重新创建一个新的 FSEventStreamRef - 这更糟糕的是以上。