我正在使用FSEventsFramework
來監視目錄是否有更改。我想知道我的邏輯是否正確,用於在重命名後檢測舊文件名和新名稱。通過FSEventsFramework檢測舊文件名和新文件名
- 我想重命名,兩個事件都在相同的回調。
- 舊文件名具有事件ID X-1
- 新的文件名,甚至有ID爲X
這是真的嗎?
謝謝
我正在使用FSEventsFramework
來監視目錄是否有更改。我想知道我的邏輯是否正確,用於在重命名後檢測舊文件名和新名稱。通過FSEventsFramework檢測舊文件名和新文件名
這是真的嗎?
謝謝
據我所知,你的假設並不總是如此。在FSEventStreamCreate上,您將傳遞延遲以及延遲kFSEventStreamCreateFlagNoDefer
的含義標誌。因此,事件可能會或可能不會進行相同的回調。此外,文件可以被重命名爲不同的方式。一些文件系統-API實際上重命名文件,同時保持類似mv
的inode,其他像NSDocument創建一個新的inode。有時你會在回調中收到kFSEventStreamEventFlagItemRenamed,有時候不會。
編輯:替代FSEvents是Kernel Queues和NSFileCoordinator
FSEvents不知何故沒有在API-docs的完整記錄。看看頭文件FSEvent.h,那裏有更多的東西。
然後,爲了方便查看重命名所發生的情況,運行您的應用程序並使用Finder進行重命名,使用終端mv以及基於文檔的應用程序,使用文件名右側的小三角形。
感謝泰姬陵,我將潛伏期設置爲0,你認爲在這種情況下應該出現相同的回調?但是不管是否在同一個CB中,你是否知道舊的/新的重命名事件應該是X還是X + 1事件ID? – Noitidart
感謝@mahal的編輯! :)你的意思是內核隊列:https://developer.apple.com/library/mac/documentation/Darwin/Conceptual/FSEvents_ProgGuide/KernelQueues/KernelQueues.html – Noitidart
@Noitidart這個答案幫助你嗎?如果是的話,你想用左邊的綠色複選標記來接受我的答案嗎? –