在SCEvents.m文件
添加常數的FSEventStreamCreateFlags kFSEventStreamCreateFlagFileEvents到FSEventStreamCreate標誌如下所示:
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下載文件時出現的問題 「
我暫時刪除了我的答案,建議將路徑指針放在描述方法中。實際上再次查看代碼我不認爲這將工作,因爲我認爲eventPath指向可能意味着觀察路徑的路徑。 我會回頭看看它,看看我是否可以找到添加它。 – markhunte
我已經將我的回答加回到了我的測試工作中。 – markhunte
@markhunte哪些應該留下刺痛?這個還是這個問題?這個答案似乎更清晰 - 但我們可以編輯另一個,如果這被關閉作爲欺騙... – bmike