2012-10-02 45 views
3

我已經使用mac文件系統事件API在C++中創建了一個簡單的文件系統觀察器,如下所示:apple developer doc。我的問題在標題中。我如何獲得改變的事物的路徑? eventPaths數組僅給出了我實際上正在觀察的父目錄(或其集合)的路徑。但不是被修改的底層目錄條目。是否有可能從FSEvent ID獲取文件名?

我可以使用回調,即:

static void mycallback(
      ConstFSEventStreamRef streamRef, 
      void *clientCallBackInfo, 
      size_t numEvents, 
      void *eventPaths, 
      const FSEventStreamEventFlags eventFlags[], 
      const FSEventStreamEventId eventIds[]) 

我在想,也許名字可以從這些項目中的一個被提取搶有用的信息?

編輯:

例如,我們可以找到一個文件在這種情況下,

kFSEventStreamEventFlagItemCreated

提高創建。但是,我應該如何去獲取該物品的實際名稱? (與其他事件類似,例如刪除項目等)。

編輯2:

我開始認爲,這將是不可能的做我想做的。 From FS tech overview

「重要的一點是,通知的粒度在目錄級別,它告訴你只有目錄中的內容發生了變化,但不會告訴你發生了什麼變化。」

又名。開溜。

乾杯,

本。

回答

4

實際上,這是可能的,但僅在10.7+。查看FSEventStreamCreate的kFSEventStreamCreateFlagFileEvents標誌(文檔號here)。

+0

真的嗎?輝煌!謝謝! :-)我看看.. –

+1

正是我想要的。你知道是否有可能限制搜索過程的深度,就像探索的子目錄的數量一樣?乾杯。 –

+0

不是我所知道的。我認爲你必須手動完成。 – Kat

0

不幸的是,我發現,這是不可能的;請參閱FS tech overview以獲取解釋/動機。解決方法是拍攝目錄的快照,然後每當發現更改時,拍攝新快照並將其與原始文件進行比較,以查找已更改的特定目錄條目(及其名稱)。

編輯:有可能在> = 10.7(見選擇回答)

相關問題