Я создал простой наблюдатель файловой системы в C ++, используя mac File System Events API, как описано здесь: Apple Developer Doc. Мой вопрос в заголовке. Как мне узнать путь к тому, что было изменено? Массив eventPaths только дает мне путь родительского каталога (или его набора), который я по сути наблюдаю. Но не основная запись каталога, которая была изменена.
Я могу получить полезную информацию, используя обратный вызов, т.е.
static void mycallback(
ConstFSEventStreamRef streamRef,
void *clientCallBackInfo,
size_t numEvents,
void *eventPaths,
const FSEventStreamEventFlags eventFlags[],
const FSEventStreamEventId eventIds[])
Я думаю, что, возможно, имя можно извлечь из одного из этих предметов?
РЕДАКТИРОВАТЬ:
Например, можно обнаружить, что файл создается, и в этом случае
kFSEventStreamEventFlagItemCreated
Поднялся. Но как мне узнать точное название этого предмета? (Аналогично для других событий, например, когда элемент удален и т. Д.).
РЕДАКТИРОВАТЬ 2:
Я начинаю думать, что не будет возможности делать то, что я хочу. От Обзор технологий FS:
«Важно отметить, что детализация уведомлений находится на уровне каталога. Он говорит вам только о том, что что-то в каталоге изменилось, но не говорит вам, что изменилось».
Ака. Мудак.
Ура,
Бен.
На самом деле это возможно, но только на 10.7+. Проверьте флаг kFSEventStreamCreateFlagFileEvents для FSEventStreamCreate (документы Вот).
К сожалению, как я обнаружил, это невозможно; увидеть Обзор технологий FS для объяснения / мотивации. Обходным решением будет сделать моментальный снимок каталога, а затем, когда обнаружится изменение, сделать новый снимок и сопоставить его с оригиналом, чтобы найти конкретные записи каталога (и их имена), которые изменились.
РЕДАКТИРОВАТЬ: это возможно в> = 10,7 (см выбранный ответ)