如何在我的应用程序未运行时确定给定目录中发生的更改? 该目录仅包含目录和符号链接,但只要用户在目录中复制新文件或创建新的子目录,应用程序就必须处理它。特别是如果我的应用程序没有运行时发生这种变化。 第一种naiv方式是将整个Directory和Fileslist存储在某处,然后在我的应用程序的下一次启动时,我再次抓取整个目录并将其与我保存的状态进行比较,但这需要花费很多时间。有没有办法为每个子目录创建一个哈希并只比较哈希?这会更快吗?你有这个任务的最佳实践吗?
亲切的问候
答案 0 :(得分:1)
查看FSEvents文档。第3点描述了您的问题和可能的解决方案:
FSEventStreamStart() - >在创建流时,使用客户端提供的回调开始接收事件并从客户端的runloop服务它们。如果为since参数提供了值,那么“历史”事件将首先通过回调发送,然后是历史记录事件,那么“当代”事件将持续发送(就好像你已经提供了kFSEventStreamEventIdSinceNow)。
如果您在创建时指定了所需的目录,则只能获得在该路径下或在该路径下发生的历史事件:
FSEventStreamRef FSEventStreamCreate(
CFAllocatorRef allocator,
FSEventStreamCallback callback,
FSEventStreamContext *context,
CFArrayRef pathsToWatch,
FSEventStreamEventId sinceWhen,
CFTimeInterval latency,
FSEventStreamCreateFlags flags);
您需要指定FSEventStreamCallback
。此回调在该路径上发送路径和事件标志的数组。然后你应该能够筛选事件。看一下FSEventStreamEventFlags
来挑选你需要的那些。
另请查看File System Events Programming guide。有一节介绍了您的确切问题。建议将事件系统与层次缓存结合起来。