首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FullPath (FSEvents包装器)获取已更改文件的FSEvents?

使用FullPath (FSEvents包装器)获取已更改文件的FSEvents?
EN

Stack Overflow用户
提问于 2014-02-11 12:08:02
回答 1查看 867关注 0票数 1

我已经使用SCEvents:https://github.com/mz2/SCEvents实现了文件监视部件--在创建、修改、删除或重命名文件时通知我如下:

2014-02-11 16:08:38.725 TestSCEvent10-22995:403 SCEvent { eventId = 3182336,eventPath =/Users 1/Desktop,eventFlags = 131328 }

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-11 12:31:09

在SCEvents.m文件中

kFSEventStreamCreateFlagFileEvents常量FSEventStreamCreate添加到FSEventStreamCreate标志中,如下所示:

代码语言:javascript
复制
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 请求文件级通知。您的流将接收有关您正在监视的层次结构中的单个文件的事件,而不仅仅是接收目录级别的通知。小心使用此标志,因为它会产生比没有它更多的事件。可在OSXv10.7及更高版本中获得。 在FSEvents.h中申报。 讨论 可以传递给FSEventStreamCreate.()函数的标志,以修改正在创建的流的行为。

将更改eventPath以输出完整的文件路径。

更新:

在SCEvents.m文件中也有延迟设置。

//常数静态const CGFloat SCEventsDefaultNotificationLatency = 3.0;

它可以设置为3.0。我把我的定在8点。

“延迟”参数,该参数指示在事件发生后转发事件的等待时间;这减少了事件的数量,并减少了客户端看到“中间”状态的可能性,例如在对文件进行“安全保存”、创建包或通过Safari下载文件时出现的情况。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21708559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档