我设置了一个运行良好的FSEvent,但每次启动应用程序时都会报告相同的事件。
前:
我的FSEvent监控目录是:
Test/
...并且有三个文件:
test1, test2, test3
但是,在我删除了我的FSEvent目录中的test1
之后,它一直告诉我每次运行程序时都删除了test1
,而不是删除后的一次。
我清理了上下文中的所有托管对象并删除了整个目录,但事件仍在报告中。
我应该怎么做才能在删除后立即告诉我,然后再说不出来?
非常感谢!
答案 0 :(得分:1)
文件系统事件在启动之间是持久的。它们由文件系统本身跟踪,而不是应用程序。这就是为什么每次发布都会看到事件的原因。
我相信您必须致电FSEventsPurgeEventsForDeviceUpToEventId
等来清除事件。 击>
带上一粒盐。我没有摆弄它。
来自File System Events Programming Guide:
要处理持久性事件,请使用 应用程序应定期存储 它处理的最后一个事件ID。然后, 当它需要回去看看什么 文件已经改变,只需要 看看之后发生的事件 上次知道的事件。获取所有活动 自从过去的一个特定事件, 你在之后传递了事件ID FSEventStreamCreate或的参数 FSEventStreamCreateRelativeToDevice] [在每台设备的基础上,您也可以 轻松使用时间戳来确定 要包括哪些事件。去做这个, 你必须先打电话 FSEventsGetLastEventIdForDeviceBeforeTime 从以后获取最后一个事件ID 论证 FSEventStreamCreateRelativeToDevice。
我认为要记住的重要一点是文件系统事件实际上并未存储,甚至与正在观察它们的应用程序相关。它们独立于文件系统本身的应用程序而存在。在实践中,可以设置几个不同的应用程序来观察同一事件。