通过 FSEventsFramework 检测旧文件名和新文件名
Detect old file name and new file name via FSEventsFramework
我正在使用 FSEventsFramework
来监视目录的变化。我想知道我的逻辑是否合理,用于检测重命名后的旧文件名和新名称。
- 我认为重命名时,两个事件都在同一个回调中。
- 旧文件名的事件 ID 为 X-1
- 新文件名的 ID 为偶数 X
这是真的吗?
谢谢
据我的经验,你的假设并不总是正确的。在 FSEventStreamCreate 上,您将传递延迟以及延迟含义的标志 kFSEventStreamCreateFlagNoDefer
。因此,事件可能会或可能不会出现在同一个回调中。此外,可以通过不同的方式重命名文件。一些 Filesystem-APIs 实际上重命名文件,同时保持像 mv
的 inode,其他像 NSDocument 创建一个新的 inode。有时您会在回调中收到 kFSEventStreamEventFlagItemRenamed,有时则不会。
编辑:FSEvents 的替代品是 Kernel Queues and NSFileCoordinator
FSEvents 在 API-Docs 中以某种方式没有完整记录。看看头文件 FSEvent.h,那里有更多内容可供阅读。
然后为了轻松查看重命名的情况,运行 您的应用程序并使用 Finder、终端 mv 以及在基于文档的应用程序中使用文件名右侧的小三角形进行一些重命名.
我正在使用 FSEventsFramework
来监视目录的变化。我想知道我的逻辑是否合理,用于检测重命名后的旧文件名和新名称。
- 我认为重命名时,两个事件都在同一个回调中。
- 旧文件名的事件 ID 为 X-1
- 新文件名的 ID 为偶数 X
这是真的吗?
谢谢
据我的经验,你的假设并不总是正确的。在 FSEventStreamCreate 上,您将传递延迟以及延迟含义的标志 kFSEventStreamCreateFlagNoDefer
。因此,事件可能会或可能不会出现在同一个回调中。此外,可以通过不同的方式重命名文件。一些 Filesystem-APIs 实际上重命名文件,同时保持像 mv
的 inode,其他像 NSDocument 创建一个新的 inode。有时您会在回调中收到 kFSEventStreamEventFlagItemRenamed,有时则不会。
编辑:FSEvents 的替代品是 Kernel Queues and NSFileCoordinator
FSEvents 在 API-Docs 中以某种方式没有完整记录。看看头文件 FSEvent.h,那里有更多内容可供阅读。
然后为了轻松查看重命名的情况,运行 您的应用程序并使用 Finder、终端 mv 以及在基于文档的应用程序中使用文件名右侧的小三角形进行一些重命名.