我一直在玩我FSEvents
的一个小应用程序,以将我的应用程序的内容与硬盘驱动器上的内容同步(基本上,它是一个小图像查看器,我希望它的内容在 HDD 的内容发生变化时更新)
我使用该标志创建我的流kFSEventStreamCreateFlagFileEvents
,但我很难弄清楚这些事件是如何由操作系统(或内核或其他)生成的,不幸的是,没有使用此标志生成的事件的文档......它似乎它们是 10.7 的新功能,但仍未记录在案。
所以,我的主要问题是“重命名”。当我进行简单的重命名时,会向我的回调发送 2 个 kFSEventStreamEventFlagItemRenamed 事件。一个包含旧文件名,第二个包含新文件名。当您重命名一批文件时会出现问题,这些事件可能不是连续的。例如,它是以下情况:
- “file1”->“new_file_1”
- “file2”->“new_file_2”
我可能会按以下顺序接收事件:
- “重命名”/“文件 1”
- “重命名”/“文件 2”
- “重命名”/“new_file_1”
- “重命名”/“new_file_2”
当您捕获第二个重命名事件时,似乎没有任何方法可以获取第一个重命名事件的 id ......所以我所做的是:当接收到“重命名”事件时,我使用 stat()文件名。如果stat返回成功,则表示它是新的文件名。如果不是,则说明它是旧的。我仍然无法链接这两个事件,但至少我可以通过删除旧文件并添加新文件来解决问题。
所以,我基本上有两个问题:
第一个是:我是不是完全失明了,没有看到通过 fsevents 正确捕捉“重命名”事件的明显方法?
第二个 i:我有时会遇到一个奇怪的错误,不是只发送 2 个重命名的事件,而是发送了 3 个!所以我得到一个文件添加了两次......我不确定这是否是一个错误,或者这是否来自我完全错过了使用带有kFSEventStreamCreateFlagFileEvents
标志的 fsevent API 的事实......
欢迎任何帮助,我完全没有想法来解决这个问题!