FSEvents在OS X Leopard上出现奇怪现象

时间:2009-05-27 00:18:29

标签: macos filesystems macos-carbon fsevents

我想监视mac上几个目录的文件系统事件。我想要监视的目录可能会在运行时更改,因此在这里使用FSEvents是我的应用程序所做的:

  • 创建一个全局回调函数来处理回调
  • 为每个文件夹创建一个新的FSEventStreamRef,将其与上面创建的回调相关联,并向eventStream添加一个上下文,帮助我将更改回调与此文件夹相关联

Stuff似乎主要起作用,但是我注意到调用回调和将'eventPaths'值发送到回调时有些奇怪。

例如,如果我为/ Foo和/ Bar创建了StreamRef,如果我在/ Bar中添加一个文件,我的回调几乎立即被调用,但是eventPaths指向/ Foo中的一个位置,以及我关联的上下文StreamRef也是/ Foo的。

或者说,我正在监视/ Foo和/ Bar然后删除/ Bar(通过正确停止和关闭StreamRef for / Bar)。我现在为/ Fee创建一个新的FSEventStreamRef并与同一个回调相关联。我对/ Fee所做的任何更改都不会导致调用回调,但是对/ Foo的更改会继续引发回调。

我在网上看到的任何示例或文档都只讨论监控单个文件夹。我是如何将单个回调与多个FSEventStreamRefs联系起来的?听起来这应该不是问题......

是否有人以可靠的方式做了类似的事情,或者对我可能尝试不同的方式提出了什么建议?

我尝试做的一件事就是尝试使用单个FSEventStreamRef,并将CFArrayRef传递给我想要的所有路径,当我的监视列表更改并重新创建新的FSEventStreamRef时 - 这个工作正常更糟糕的是上述情况。

1 个答案:

答案 0 :(得分:4)

Works for me.我模仿了这些特征:

  1. 每个流一条路径
  2. 每个路径/流的一个上下文
  3. 所有流的一个回调
  4. 你能展示失败的代码吗?