使用FSEvents(FSEvents包装器)获取已更改文件的完整路径?

时间:2014-02-11 12:08:02

标签: macos xcode fsevents

我使用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}

它返回父目录的路径。我应该如何获得修改过的文件的完整路径?

1 个答案:

答案 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下载文件   “