Можно ли получить имя файла из идентификатора FSEENT?
Вопрос
Я создал простую файловую систему наблюдателя на C ++, используя API MAC-файловую систему API, как документировано здесь: разработчик Apple Doc . Мой вопрос в названии. Как мне получить путь того, что было изменено? Массив EventPaths дает мне только путь родительского каталога (или устанавливать их), что я по сути смотрю. Но не базовая запись каталога, которая была изменена.
Я могу получить полезную информацию, используя обратный вызов, то есть.:
static void mycallback(
ConstFSEventStreamRef streamRef,
void *clientCallBackInfo,
size_t numEvents,
void *eventPaths,
const FSEventStreamEventFlags eventFlags[],
const FSEventStreamEventId eventIds[])
.
Я думаю, что, возможно, имя можно извлечь из одного из этих предметов?
Редактировать:
Например, можно найти, что файл создан в этом случае A
kfseventstreameventflagitemcreated
поднят. Но как мне идти о том, чтобы получить фактическое название этого предмета? (Точно так же для других событий, как при удалении элемента и т. Д.).
Редактировать 2:
Я начинаю думать, что нельзя делать то, что я хочу. Из
"Важный момент, чтобы убрать то, что гранулярность уведомлений находится на уровне каталога. Он говорит вам только в том, что что-то в каталоге изменилось, но не говорит вам, что изменилось».
aka. Bugger.
ура,
Бен.
Решение
На самом деле, это возможно, но только на 10,7+.Проверьте флаг kfseventstreamcreateflagfileereamcreateflagfileereereate for fseventstreamcreate (docs здесь).
Другие советы
К сожалению, как я обнаружил, это невозможно;Смотрите FS Tech Обзор для объяснения / мотивации.Работа - это было бы сделать снимок каталога, а затем обнаружено, когда изменение обнаружено, возьмите новый снимок и разверните его с оригиналом, чтобы найти конкретные записи каталогов (и их имена), которые изменились.
Редактировать: можно в>= 10,7 (см. Выбранный ответ)