文件系统事件/ kqueue是否有一个好的objc库包装器来处理递归观察?

时间:2011-05-13 04:08:42

标签: objective-c filesystemwatcher fsevents kqueue

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

我知道我可以使用File System Eventskqueue执行此操作。前者没有提供更改哪个特定文件的详细信息(要求我构建我正在观看的目录的快照,然后扫描它以找出更改的文件)。后者不支持递归观看(要求我以递归方式将监视添加到父目录中的每个文件和目录)。

我已经找到了能够为我处理快照/递归乐趣的库,但找不到任何库。 UKKQueue看起来像是低级kqueue内容的好包装,但似乎没有进行递归。 GTMFileSystemKQueue也是如此。 SCEvents看起来像File System Events的好包装,但似乎无法找到更改的特定文件。

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

1 个答案:

答案 0 :(得分:0)

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

// 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:)];
}