OSX FSEvent API并跟踪多个重命名事件

时间:2012-11-07 00:04:09

标签: macos cocoa fsevents

有一个discussion连续的 FSEventStreamEventId 可用于检测 kFSEventStreamEventFlagItemRenamed 事件的旧名称和新名称。这似乎适用于我对基本重命名案例的测试。但是,在以下情况中,这似乎有所不同:

  • 监视目录 test_dir 以查找事件
  • 文件 A 存在于 test_dir
  • 从bash终端发出命令 mv A B;触摸C; mv C A 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 的事实似乎已丢失。

我希望看到一个像60095817 10800这样的事件。

任何人都可以确认这种行为吗?如果有的话,是否有人对如何处理此限制有任何想法,而无需维护目录内容的单独表示并重新扫描/比较整个目录?

我正在测试OS X 10.8.2。

编辑:刚发现另一个discussion表示这可能是多个重命名的更常见问题。

0 个答案:

没有答案