是否可以从FSEvent id获取文件名? 我在C++中使用了Mac文件系统事件API创建了一个简单的文件系统观察器。我的问题在标题里。我如何得到被改变的东西的路径?eventPaths数组只提供我正在监视的父目录(或其集合)的路径。但不是被修改的基础目录项

是否可以从FSEvent id获取文件名? 我在C++中使用了Mac文件系统事件API创建了一个简单的文件系统观察器。我的问题在标题里。我如何得到被改变的东西的路径?eventPaths数组只提供我正在监视的父目录(或其集合)的路径。但不是被修改的基础目录项,c++,macos,fsevents,C++,Macos,Fsevents,我可以通过回调获取有用的信息,即: static void mycallback( ConstFSEventStreamRef streamRef, void *clientCallBackInfo, size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[],

我可以通过回调获取有用的信息,即:

   static void mycallback(
            ConstFSEventStreamRef streamRef,
            void *clientCallBackInfo,
            size_t numEvents,
            void *eventPaths,
            const FSEventStreamEventFlags eventFlags[],
            const FSEventStreamEventId eventIds[])
我在想也许这个名字可以从这些物品中提取出来

编辑:

例如,您可能会发现创建了一个文件,在这种情况下

kFSEventStreamEventFlagItemCreated

这是提高。但是我应该如何获得该项目的实际名称呢?(类似于其他事件,如删除项目等)

编辑2:

我开始觉得不可能做我想做的事。发件人:

需要注意的一点是,通知的粒度是在目录级别。它只告诉您目录中的某些内容已更改,但不告诉您更改了什么

阿卡。混蛋

干杯


不幸的是,我发现这是不可能的;有关解释/动机,请参阅。一种解决方法是拍摄目录快照,然后每当发现更改时,拍摄新快照并将其与原始快照进行区分,以查找更改的特定目录条目(及其名称)


编辑:在>=10.7中是可能的(参见所选答案)

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

正是我想要的。您知道是否有可能限制搜索过程的深度,比如在所探索的子目录的数量上?干杯,你是怎么做到的?我正在使用,但仍然需要手动运行匹配目录中最新更改的文件日期,这非常麻烦。