我使用SCEvents实现了文件观察器部分:https://github.com/mz2/SCEvents它正在通知我何时创建,修改,删除或重命名文件:
2014-02-11 16:08:38.725 TestSCEvent10-2 [2995:403] SCEvent {eventId = 3182336,eventPath = / Users / user1 / Desktop,eventFlags = 131328}
它返回父目录的路径。我应该如何获得修改过的文件的完整路径?
答案 0 :(得分:4)
在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以输出完整文件路径。
更新:
同样在In SCEvents.m文件中是延迟设置。
//常数 static const CGFloat SCEventsDefaultNotificationLatency = 3.0;
可以设置为3.0。我把我的定为8.00。
“latency”参数,指示事件发生后等待的时间 在转发之前;这减少了事件的数量并减少了 客户看到“中间”状态的机会,比如 那些在对文件进行“安全保存”时出现的,创建一个 包,或通过Safari下载文件 “