我想编写一个 OSX(雪豹)应用程序,当特定目录中的文件发生更改时,该应用程序会收到通知,并且我希望访问已更改的特定文件的路径。

我知道我可以使用以下任一方法来做到这一点 File System Events 或者 kqueue. 。前者不提供更改的特定文件的详细信息(要求我构建我正在监视的目录的快照,然后扫描它以找出更改的文件)。后者不支持递归监视(要求我递归地将监视添加到父目录中的每个文件和目录)。

我已经寻找过为我处理快照/递归乐趣的库,但找不到任何库。 UKKQueue 看起来像是一个很好的低级别包装器 kqueue 东西,但似乎没有做递归。同样适用于 GTMFileSystemKQueue. SCEvents 看起来像是一个很好的包装 File System Events 但似乎无法找出更改的特定文件。

是否有一个库可以满足我的需求并且适合这些技术的 objc 项目?

有帮助吗?

解决方案

我最终使用了 GTMFileSystemKQueue 在我发现递归迭代 objc 中的目录是多么容易之后:

// Create a directory enumerator for the given top level directory
NSDirectoryEnumerator *de = [[NSFileManager defaultManager] enumeratorAtPath:dir];

// Add a kqueue on every file and folder below the top level
NSString *file;
while ((file = [de nextObject])) {
    [[GTMFileSystemKQueue alloc] initWithPath:[dir stringByAppendingString:file]
                                    forEvents:kGTMFileSystemKQueueAllEvents
                                acrossReplace:YES
                                       target:self
                                       action:@selector(fileSystemKQueue:events:)];
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top