是否可以从FSEvent id获取文件名
Is it possible to get the filename from an FSEvent id?
我使用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(见所选答案)
相关文章:
- 如何获取 GLFW 窗口 ID?
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 类型ID,如何仅获取类型名称
- 如何通过向量中的结构 id 获取索引号
- 获取 c++ mfc vs2015 中弹出资源菜单项的 id
- 无法获取进程 ID 4 (ntoskrnl.exe) 的可执行路径
- 在运行之前获取 std::thread's thread:id?
- 从 C++ 中的二进制路径(命令行语句)获取进程 ID
- 以编程方式获取 Samba 共享卷 ID
- C++ 通过进程 ID 获取进程的名称
- 从资源 ID 获取 CButton 控件名称?
- C++ 在运行时获取具有 ID 的对象
- 如何通过id获取线程对象?
- 如何从C++中的语言 ID 获取语言名称
- 视觉C++从父进程 ID 获取子进程 ID
- 通过我的可执行文件的资源 ID 获取图标索引,C++
- 是否可以从FSEvent id获取文件名
- C++ 获取进程 ID 获取本地 ID(如果目标进程未打开)
- 通过ID获取名称
- 如何在wxWidgets中按id获取小部件