我試圖使用FSEvents來檢測文件何時添加/從特定文件夾中刪除。目前,我實現了一個圍繞FSEvents的簡單包裝,它工作正常:我得到所有事件。使用Lion上的FSEvents跟蹤文件重命名/刪除
但我現在的問題是,當我在Finder中重命名一個文件時,我捕獲了2個不同的事件:第一個類型爲「重命名」的舊文件名,另一個「重命名」新的文件名。這兩個調用之間的事件id不同。
那麼,我該如何知道哪個「重命名」事件包含舊名稱,哪個事件包含舊名稱?我試着查看文檔,但不幸的是,kFSEventStreamEventFlagItemRenamed沒有記錄......它在Lion中似乎是新的。
PS:我能想到的唯一方法是:在重命名的事件中,我檢查了我的UI,看看是否有與事件路徑對應的項目。如果是這樣,我將其標記爲重命名。如果沒有,我檢查一個項目是否被標記爲重命名,如果是,那麼我將它重命名爲新的事件路徑。但我真的不喜歡這個想法...
編輯:好的,我沿着我的「PS」的一行說了些什麼:我注意到當重命名某些東西時,2個事件的ID是連續的,所以使用包含新名稱的事件的ID,我可以獲取包含舊名稱的事件。在「重命名」事件的情況下,我只是在界面中使用一個小詞典來存儲ID和相關路徑。
反正我現在能趕上重命名事件,甚至是移動事件:當你移動一個文件,這是這是由FSEventStream抓住了「改名」事件......
不過,我還有一個最後問題:刪除。當我刪除某些內容時,它會移至回收站:我收到一個「重命名」事件。但問題是我沒有收到第二次重命名事件。只有.DS_Store文件上的「修改」事件。我想這個文件被Finder用來了解哪些文件在bin中,等等。所以我可以檢查對這個文件的修改,並獲取最後一次「重命名」事件來檢測文件是否被髮送到bin。但是我使用的是使用Apsps的TotalFinder,它修改了Finder存儲.DS_Store文件的方式:我不再在此上收到「修改」。 要sumarize:我無法檢測文件何時發送到垃圾箱...
任何想法我可以做到這一點?也許用FSEvent以外的東西來捕捉這個事件?
非常有幫助,感謝您的代碼:) –
在您的網站上沒有聯繫頁面上的發送按鈕,請給我你的電子郵件,我想問你一些問題。謝謝:) –
我在我的網站上修復了聯繫表格。我不知道如何發送私人消息StackOverflow(或者,即使它是可能的^^) – Citron