有一个讨论是连续的FSEventStreamEventId可用于检测kFSEventStreamEventFlagItemRenamed事件的旧名称和新名称。这似乎在我对基本重命名案例的测试中起作用。但是,这似乎在以下情况下被打破:
- 监视目录test_dir的事件
- 文件A存在于test_dir
- 从 bash 终端发出命令mv AB;touch C;mv CA in test_dir
这会导致以下事件:
2012-11-06 18:13:01.246 test[45080:1603] event [60095818] [10800] [/Users/tim/test_dir/B]
2012-11-06 18:13:01.248 test[45080:1603] event [60095824] [10900] [/Users/tim/test_dir/C]
2012-11-06 18:13:01.253 test[45080:1603] event [60095825] [10800] [/Users/tim/test_dir/A]
事件位 0x10800 =“文件重命名”和 0x10900 =“文件创建/重命名”
(来自 FSEvents.h)
kFSEventStreamEventFlagItemCreated = 0x00000100
kFSEventStreamEventFlagItemRenamed = 0x00000800
kFSEventStreamEventFlagItemIsFile = 0x00010000
在这种情况下,似乎将A重命名为B的事实丢失了。
我希望看到像 A 的 60095817 10800 这样的事件。
任何人都可以确认这种行为吗?如果是这样,是否有人对如何处理此限制有任何想法,而无需维护目录内容的单独表示并重新扫描/比较整个目录?
我正在 OS X 10.8.2 上进行测试。
编辑:刚刚发现另一个讨论表明这可能是一个更普遍的问题,有多个重命名。