Можно ли получить имя файла из идентификатора FSEvent?

Я создал простой наблюдатель файловой системы в 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:

«Важно отметить, что детализация уведомлений находится на уровне каталога. Он говорит вам только о том, что что-то в каталоге изменилось, но не говорит вам, что изменилось».

Ака. Мудак.

Ура,

Бен.

3

Решение

На самом деле это возможно, но только на 10.7+. Проверьте флаг kFSEventStreamCreateFlagFileEvents для FSEventStreamCreate (документы Вот).

4

Другие решения

К сожалению, как я обнаружил, это невозможно; увидеть Обзор технологий FS для объяснения / мотивации. Обходным решением будет сделать моментальный снимок каталога, а затем, когда обнаружится изменение, сделать новый снимок и сопоставить его с оригиналом, чтобы найти конкретные записи каталога (и их имена), которые изменились.

РЕДАКТИРОВАТЬ: это возможно в> = 10,7 (см выбранный ответ)

0

По вопросам рекламы [email protected]