1

我设置了一个运行良好的 FSEvent,但每次启动应用程序时它都会报告相同的事件。

前任:

我的 FSEvent 监视器目录是:

Test/

...并且有三个文件:

test1, test2, test3

但是,在我test1在我的 FSEvent 目录中删除之后,它一直告诉我test1每次运行程序时都已被删除,而不仅仅是删除后的一次。

我清理了上下文中的所有 managedObjects 并删除了整个目录,但该事件不断被报告。

我应该怎么做,它只会在删除后立即告诉我,然后再也不告诉我?

非常感谢!

4

1 回答 1

1

文件系统事件在启动之间是持久的。它们由文件系统本身而不是应用程序跟踪。这就是为什么您每次启动时都会看到该事件。

我相信你必须打电话FSEventsPurgeEventsForDeviceUpToEventId或类似的事情来清除事件。

带着一粒盐。我没有过多地摆弄它。

编辑:

来自文件系统事件编程指南

要处理持久事件,您的应用程序应定期存储它处理的最后一个事件 ID。然后,当它需要返回查看哪些文件发生了变化时,它只需要查看在最后一个已知事件之后发生的事件。要获取自过去某个特定事件以来的所有事件,请将 sinceWhen 参数中的事件 ID 传递给 FSEventStreamCreate 或 FSEventStreamCreateRelativeToDevice。] [在每个设备的基础上,您还可以轻松地使用时间戳来确定要包含哪些事件。为此,您必须首先调用 FSEventsGetLastEventIdForDeviceBeforeTime 以获取 FSEventStreamCreateRelativeToDevice 参数 sinceWhen 的最后一个事件 ID。

我认为要记住的重要一点是文件系统事件实际上并未存储,甚至与正在观察它们的应用程序相关。它们独立于文件系统本身的应用程序而存在。在实践中,可以设置几个不同的应用程序来观察相同的事件。

于 2010-06-22T03:07:53.063 回答