2012-10-02 24 views
3

我已经使用mac文件系统事件API在C++中创建了一个简单的文件系统观察器,如下所示:apple developer doc。我的问题在标题中。我如何获得改变的事物的路径? eventPaths数组仅给出了我实际上正在观察的父目录(或其集合)的路径。但不是被修改的底层目录条目。是否有可能从FSEvent ID获取文件名?

我可以使用回调,即:

static void mycallback(
      ConstFSEventStreamRef streamRef, 
      void *clientCallBackInfo, 
      size_t numEvents, 
      void *eventPaths, 
      const FSEventStreamEventFlags eventFlags[], 
      const FSEventStreamEventId eventIds[]) 

我在想,也许名字可以从这些项目中的一个被提取抢有用的信息?

编辑:

例如,我们可以找到一个文件在这种情况下,

kFSEventStreamEventFlagItemCreated

提高创建。但是,我应该如何去获取该物品的实际名称? (与其他事件类似,例如删除项目等)。

编辑2:

我开始认为,这将是不可能的做我想做的。 From FS tech overview

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

又名。开溜。

干杯,

本。

回答

4

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

+0

真的吗?辉煌!谢谢! :-)我看看.. –

+1

正是我想要的。你知道是否有可能限制搜索过程的深度,就像探索的子目录的数量一样?干杯。 –

+0

不是我所知道的。我认为你必须手动完成。 – Kat

0

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

编辑:有可能在> = 10.7(见选择回答)

相关问题