通过FSEventsFramework检测旧文件名和新文件名

时间:2015-04-23 07:15:45

标签: objective-c macos core-foundation fsevents

我使用FSEventsFramework来监控目录的变化。我想知道我的逻辑是否合理,用于在重命名后检测旧文件名和新名称。

  • 我认为在重命名时,两个事件都在同一个回调中。
  • 旧文件名将包含事件ID X-1
  • 新文件名甚至会为ID X

这是真的吗?

谢谢

1 个答案:

答案 0 :(得分:2)

据我所知,你的假设并非总是如此。在FSEventStreamCreate上,您将传递延迟以及延迟kFSEventStreamCreateFlagNoDefer含义的标志。因此,事件可能会也可能不会出现在同一个回调中。此外,文件可以通过不同的方式重命名。一些Filesystem-API实际上重命名文件,同时保持像mv这样的inode,其他像NSDocument创建一个新的inode。有时你会在回调中收到kFSEventStreamEventFlagItemRenamed,有时候不会。

编辑:FSEvents的替代方案是Kernel QueuesNSFileCoordinator

FSEvents在某种程度上没有在API-Docs中完整记录。看看头文件FSEvent.h,还有更多要在那里阅读。

然后,为了轻松查看重命名的内容,运行您的应用程序并使用Finder进行重命名,使用终端mv以及基于文档的应用程序,使用文件名右侧的小三角形。