通过 FSEventsFramework 检测旧文件名和新文件名
Posted
技术标签:
【中文标题】通过 FSEventsFramework 检测旧文件名和新文件名【英文标题】:Detect old file name and new file name via FSEventsFramework 【发布时间】:2015-04-23 07:15:45 【问题描述】:我正在使用FSEventsFramework
来监视目录的更改。我想知道我的逻辑是否合理,用于检测重命名后的旧文件名和新名称。
这是真的吗?
谢谢
【问题讨论】:
你的逻辑工作正常。 【参考方案1】:就我的经验而言,您的假设并不总是正确的。在 FSEventStreamCreate 上,您将传递延迟以及延迟 kFSEventStreamCreateFlagNoDefer
含义的标志。因此,事件可能会或可能不会出现在同一个回调中。此外,还有不同的方法可以重命名文件。一些 Filesystem-APIs 实际上重命名文件,同时保留像 mv
这样的 inode,其他像 NSDocument 这样的创建一个新的 inode。有时您会在回调中收到 kFSEventStreamEventFlagItemRenamed,有时不会。
编辑:FSEvents 的替代品是 Kernel Queues 和 NSFileCoordinator
在 API 文档中不知何故没有完整记录 FSEvents。查看头文件 FSEvent.h,那里还有更多内容要阅读。
然后为了轻松查看重命名的情况,运行您的应用程序并使用 Finder、终端 mv 以及在基于文档的应用程序中使用文件名右侧的小三角形进行重命名。
【讨论】:
谢谢 mahal,我将延迟设置为 0,您认为在这种情况下应该在同一个回调中出现吗?但无论是否在同一个 CB 中,您是否知道旧/新重命名事件是否应该是 X 和 X+1 事件 ID? 感谢@mahal 的编辑! :) 你的意思是内核队列:developer.apple.com/library/mac/documentation/Darwin/Conceptual/… @Noitidart 这个答案对你有帮助吗?如果是,您是否愿意使用我的答案左侧的绿色复选标记接受它?以上是关于通过 FSEventsFramework 检测旧文件名和新文件名的主要内容,如果未能解决你的问题,请参考以下文章
旧文-Bitsort排序算法-2007-10-10 16:08