我使用mac文件系统事件API在C ++中创建了一个简单的文件系统观察程序,如下所示:apple developer doc。我的问题在标题中。我如何获得被改变的东西的路径? eventPaths数组只给出了我实际上正在观看的父目录(或其集合)的路径。但不是被修改的基础目录条目。
我可以使用回调获取有用的信息,即:
static void mycallback(
ConstFSEventStreamRef streamRef,
void *clientCallBackInfo,
size_t numEvents,
void *eventPaths,
const FSEventStreamEventFlags eventFlags[],
const FSEventStreamEventId eventIds[])
我想也许可以从其中一个项目中提取名称?
编辑:
例如,人们可能会发现创建了一个文件,在这种情况下是
kFSEventStreamEventFlagItemCreated
提出了。但是我应该如何获得该项目的实际名称? (类似于其他事件,例如删除项目等)。
编辑2:
我开始认为不可能做我想做的事。来自FS tech overview:
“重要的一点是,通知的粒度在目录级别。它只告诉您目录中的某些内容已经更改,但不会告诉您更改的内容。”
阿卡。开溜。
干杯,
本。
答案 0 :(得分:4)
实际上,这是可能的,但仅限于10.7+。查看FSEventStreamCreate的kFSEventStreamCreateFlagFileEvents标志(docs here)。
答案 1 :(得分:0)
不幸的是,我发现,这是不可能的;请参阅FS tech overview获取解释/动机。解决方法是获取目录的快照,然后每当发现更改时,获取新快照并将其与原始快照区分开,以查找更改的特定目录条目(及其名称)。
编辑:可以在> = 10.7(参见所选答案)