2

我想监视 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 - 这更糟糕的是以上。

4

1 回答 1

4

为我工作。我模仿了这些特征:

  1. 每个流一个路径
  2. 每个路径/流一个上下文
  3. 所有流的一个回调

你能显示失败的代码吗?

于 2009-05-27T02:12:03.920 回答