Cocoa 如何确定目录中的更改及其';应用程序运行之间的子目录?

Cocoa 如何确定目录中的更改及其';应用程序运行之间的子目录?,cocoa,hash,Cocoa,Hash,如何确定应用程序未运行时给定目录中发生的更改? 该目录只包含目录和符号链接,但每当用户复制目录中的新文件或创建新的子目录时,应用程序都必须处理它。特别是如果在我的应用程序未运行时发生此更改。 第一种naiv方法是将整个目录和文件列表存储在某个位置,在下一次启动应用程序时,我会再次对整个目录进行爬网,并将其与保存的状态进行比较,但这需要花费很多时间。是否有一种方法可以为每个子目录创建一个散列并只比较散列?这是一条更快的路吗?对于这项任务,您有什么最佳做法吗 亲切问候看一下文档。第3点。描述您的问题

如何确定应用程序未运行时给定目录中发生的更改? 该目录只包含目录和符号链接,但每当用户复制目录中的新文件或创建新的子目录时,应用程序都必须处理它。特别是如果在我的应用程序未运行时发生此更改。 第一种naiv方法是将整个目录和文件列表存储在某个位置,在下一次启动应用程序时,我会再次对整个目录进行爬网,并将其与保存的状态进行比较,但这需要花费很多时间。是否有一种方法可以为每个子目录创建一个散列并只比较散列?这是一条更快的路吗?对于这项任务,您有什么最佳做法吗

亲切问候

看一下文档。第3点。描述您的问题和可能的解决方案:

FSEventStreamStart()->在创建流时,使用客户端提供的回调从客户端的运行循环开始接收事件并为其提供服务。如果为sinceWhen参数提供了一个值,那么将首先通过回调发送“历史”事件,然后是HistoryDone事件,然后将持续发送“当代”事件(就像您为sinceWhen提供了KFSeventStreamventidSinceNow)

如果在创建时指定所需的目录,则只会获取在该路径下或该路径上发生的历史事件:

FSEventStreamRef FSEventStreamCreate(
   CFAllocatorRef allocator,
   FSEventStreamCallback callback,
   FSEventStreamContext *context,
   CFArrayRef pathsToWatch,
   FSEventStreamEventId sinceWhen,
   CFTimeInterval latency,
   FSEventStreamCreateFlags flags);
您需要指定一个
FSEventStreamCallback
。此回调将收到该路径上的路径数组和事件标志。然后你应该能够筛选事件。查看
fseventstreamventflags
以选择您需要的

还可以看一看。这里有一节专门讨论你的问题。建议将事件系统与层次缓存相结合