我正在使用OSX FSEventStream监视特定目录中的文件系统更改。我正在查看文档here,我发现了一个有趣的标志,kFSEventStreamCreateFlagIgnoreSelf。
根据使用此标志的文档,FSEvents框架不会通知您“当前进程触发的事件。”
听起来不错。这正是我想要的,但在实践中我发现我仍然得到一些由当前流程触发的事件。
在我的有限测试中,如果监控过程创建新文件,或者重命名和现有文件仍然触发事件。虽然现有文件的至少一些修改不会触发事件。
基于有限的文档(以及标志的名称),我不希望当前进程触发任何事件。
所以我的问题有两个方面: - 这是预期的行为吗?我担心如果我指望它存在的行为,它可能是无意的,将来它可能会从我的下方改变。
第二: - 如果是,有没有人知道在使用这个标志时我仍然可以发送哪些事件。
答案 0 :(得分:2)
我注意到在使用此标志时,我在进程中所做的任何文件更改都不会作为事件发送给我。如果我之后没有得到任何外部事件,我上次记录的eventId(下次我创建流时使用)将比我没有得到的事件更早,所以下次开始我的过程时我会看到这些事件,在事件历史转储中。
我很抱歉这不是一个很好的答案,但我观察到这可能有助于解释你所看到的内容。
答案 1 :(得分:1)
我也通过设置kFSEventStreamCreateFlagIgnoreSelf
标志来观察不到效果。
然而,设置两者 kFSEventStreamCreateFlagMarkSelf
和kFSEventStreamCreateFlagIgnoreSelf
(使用按位OR(|
))对我来说是个窍门。我不再收到有关我的应用程序保存的文件(在我的情况下是文档)的通知。
kFSEventStreamCreateFlagMarkSelf
可用。