3

我已经使用 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 技术概述

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

阿卡。臭虫。

干杯,

本。

4

2 回答 2

4

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

于 2012-10-08T06:31:02.803 回答
0

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

编辑:>=10.7 是可能的(见选择的答案)

于 2012-10-03T07:55:41.997 回答