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

Is it possible to get the filename from an FSEvent id?

本文关键字:id 获取 文件名 FSEvent 是否      更新时间:2023-10-16

我使用mac File System Events 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技术概述:

"需要注意的重要一点是,通知的粒度在目录级别。它只会告诉你目录中的某些内容发生了变化,但不会告诉你发生了什么变化。">

阿卡。Bugger。

干杯,

本。

实际上,这是可能的,但仅在10.7+上。查看FSEventStreamCreate的kFSEventStreamCreateFlagFileEvents标志(此处为文档)。

不幸的是,正如我所发现的,这是不可能的;有关解释/动机,请参阅FS技术概述。解决方法是拍摄目录的快照,然后每当发现更改时,拍摄一个新的快照并将其与原始快照进行比较,以找到更改的特定目录条目(及其名称)。

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