2015-04-23 37 views
0

我正在使用FSEventsFramework來監視目錄是否有更改。我想知道我的邏輯是否正確,用於在重命名後檢測舊文件名和新名稱。通過FSEventsFramework檢測舊文件名和新文件名

  • 我想重命名,兩個事件都在相同的回調。
  • 舊文件名具有事件ID X-1
  • 新的文件名,甚至有ID爲X

這是真的嗎?

謝謝

回答

1

據我所知,你的假設並不總是如此。在FSEventStreamCreate上,您將傳遞延遲以及延遲kFSEventStreamCreateFlagNoDefer的含義標誌。因此,事件可能會或可能不會進行相同的回調。此外,文件可以被重命名爲不同的方式。一些文件系統-API實際上重命名文件,同時保持類似mv的inode,其他像NSDocument創建一個新的inode。有時你會在回調中收到kFSEventStreamEventFlagItemRenamed,有時候不會。

編輯:替代FSEvents是Kernel QueuesNSFileCoordinator

FSEvents不知何故沒有在API-docs的完整記錄。看看頭文件FSEvent.h,那裏有更多的東西。

然後,爲了方便查看重命名所發生的情況,運行您的應用程序並使用Finder進行重命名,使用終端mv以及基於文檔的應用程序,使用文件名右側的小三角形。

+0

感謝泰姬陵,我將潛伏期設置爲0,你認爲在這種情況下應該出現相同的回調?但是不管是否在同一個CB中,你是否知道舊的/新的重命名事件應該是X還是X + 1事件ID? – Noitidart

+0

感謝@mahal的編輯! :)你的意思是內核隊列:https://developer.apple.com/library/mac/documentation/Darwin/Conceptual/FSEvents_ProgGuide/KernelQueues/KernelQueues.html – Noitidart

+1

@Noitidart這個答案幫助你嗎?如果是的話,你想用左邊的綠色複選標記來接受我的答案嗎? –

相關問題