2014-02-11 14 views
1

我一直在使用SCEvents Implemeted一個文件守望部分:https://github.com/mz2/SCEvents這是我通知時創建文件,修改,刪除或重命名是這樣的:使用SCEvents(FSEvents包裝器)獲取更改文件的完整路徑?

2014年2月11日16:08:38.725 TestSCEvent10-2 [2995:403 ] SCEvent {eventId = 3182336,eventPath =/Users/user1/Desktop,eventFlags = 131328}

它返回父目錄的路徑。我應該如何獲得修改文件的完整路徑?

+0

我暫時刪除了我的答案,建議將路徑指針放在描述方法中。實際上再次查看代碼我不認爲這將工作,因爲我認爲eventPath指向可能意味着觀察路徑的路徑。 我會回頭看看它,看看我是否可以找到添加它。 – markhunte

+0

我已經將我的回答加回到了我的測試工作中。 – markhunte

+0

@markhunte哪些應該留下刺痛?這個還是這個問題?這個答案似乎更清晰 - 但我們可以編輯另一個,如果這被關閉作爲欺騙... – bmike

回答

3

在SCEvents.m文件

添加常數的FSEventStreamCreateFlags kFSEventStreamCreateFlagFileEventsFSEventStreamCreate標誌如下所示:

static FSEventStreamRef _create_events_stream(SCEvents *watcher, CFArrayRef paths, CFTimeInterval latency, FSEventStreamEventId sinceWhen) 
{ 
    FSEventStreamContext callbackInfo; 

    callbackInfo.version = 0; 
    callbackInfo.info = (void *)watcher; 
    callbackInfo.retain = NULL; 
    callbackInfo.release = NULL; 
    callbackInfo.copyDescription = NULL; 

    return FSEventStreamCreate(kCFAllocatorDefault, 
           &_events_callback, 
           &callbackInfo, 
           paths, 
           sinceWhen, 
           latency, 
           kFSEventStreamCreateFlagUseCFTypes | kFSEventStreamCreateFlagWatchRoot |kFSEventStreamCreateFlagFileEvents); 
} 

kFSEventStreamCreateFlagFileEvents

請求文件級通知。您的信息流將收到有關您正在觀看的層級中的單個文件的事件 ,而不是僅接收目錄級別通知的 。小心使用此標誌 ,因爲它會產生比沒有它更多的事件。 適用於OS X v10.7及更高版本。

在FSEvents.h中聲明。

討論

標誌可以傳遞給FSEventStreamCreate ...()函數來 修改正在創建的流的行爲。

將更改eventPath以輸出完整的文件路徑。


UPDATE:

另外在在SCEvents.m文件是滯後設置。

//常量 static const CGFloat SCEventsDefaultNotificationLatency = 3.0;

它可以設置爲3.0。我把我的地雷設定爲8.00。

「latency」參數,告訴發生事件後等待多長時間 轉發之前;這減少了事件的數量,並減少了客戶端看到「中間」狀態的機會,例如 在執行文件的「安全保存」,創建 包或通過Safari下載文件時出現的問題 「

+0

非常感謝。..它的工作..感謝您的寶貴時間.. – user3282340

+0

嗨.. SCEvents是通知我的一切。我只想在文件被製作,刪除,修改和重命名時進行通知。而且文件夾被創建,刪除,重命名..它正確地通知,但是當文件被創建時它給出兩個事件。對於重新命名即可,即前一個路徑和新文件名的新路徑。是否有任何事情,以便我只會得到特定的文件和文件夾相關的通知?我曾嘗試通過設置枚舉在SCConstants.h文件中進行一些修改,但仍然給出了其他通知。你可以請給我指導這個..在此先感謝... – user3282340

+0

嗨,這就是爲什麼我把蘋果報價答案。查看SCEvents.m中更改延遲設置 - 靜態常量CGFloat SCEventsDefaultNotificationLatency = 3.0並閱讀FSEvent文檔,以便了解最新進展。這是我正在做的所有找到答案 – markhunte

相關問題