Есть ли хорошая оболочка библиотеки objc для событий файловой системы/kqueue, которая обрабатывает для меня рекурсивное наблюдение?
-
12-11-2019 - |
Вопрос
Я хочу написать приложение OSX (Snow Leopard), которое будет получать уведомления при изменении файлов в определенном каталоге, и мне нужен доступ к пути к конкретному файлу, который был изменен.
Я знаю, что могу сделать это, используя либо 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:)];
}