Смотреть каталог изменений файла

Я хочу отслеживать каталог (из тысяч файлов с примерно 5 уровнями подкаталогов), когда файлы меняются. Я знаю, что я могу использовать API FSEvents для мониторинга каталога, когда файлы меняются внутри этого каталога, но я не могу понять, как определить, какие файлы были изменены. Эта ссылка предлагает построить двоичное дерево и пересекать дерево каждый раз, когда событие запускается, является то, что лучший способ определить, какие файлы были изменены? Если нет, то какие альтернативы лучше?

Лучше ли рекурсивно сканировать каталог и присоединить kqueue к каждому файлу? Я не уверен, насколько хорошо это будет работать на тысячах файлов?

Ответ 1

Я использовал UKKQueue раньше со смешанными результатами.

Недавно я узнал о лучшем решении, но я этого не пробовал. Если вам нужно только нацелиться на Lion, я думаю, что новый лучший способ сделать это - использовать NSFileCoordinator. Вы реализуете методы NSFilePresenter, чтобы указать, какой каталог вам интересен (свойство presentedItemURL), и система сообщит вам, когда подпункт перемещается/изменяется/удаляется (с помощью таких методов, как presentedSubitemDidChangeAtURL:)

Мне бы хотелось услышать, как это получается, если вы идете по этому маршруту.

Ответ 2

Если вы создаете свой поток, используя kFSEventStreamCreateFlagFileEvents, то вы получите события для изменений в каждом файле, а не только уведомление об изменении в наблюдаемый каталог. К сожалению, это доступно только в OSX 10.7 и более поздних версиях.