是否可以从FSEvent id获取文件名?

时间:2012-10-02 15:17:12

标签: c++ macos fsevents

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

“重要的一点是,通知的粒度在目录级别。它只告诉您目录中的某些内容已经更改,但不会告诉您更改的内容。”

阿卡。开溜。

干杯,

本。

2 个答案:

答案 0 :(得分:4)

实际上,这是可能的,但仅限于10.7+。查看FSEventStreamCreate的kFSEventStreamCreateFlagFileEvents标志(docs here)。

答案 1 :(得分:0)

不幸的是,我发现,这是不可能的;请参阅FS tech overview获取解释/动机。解决方法是获取目录的快照,然后每当发现更改时,获取新快照并将其与原始快照区分开,以查找更改的特定目录条目(及其名称)。

编辑:可以在> = 10.7(参见所选答案)