Я играл с FSEvents
в моем небольшом приложении, чтобы синхронизировать содержимое моего приложения с тем, что находится на жестком диске (в основном, это немного просмотрщик изображений, и я хочу, чтобы его содержимое обновлялось при изменении содержимого жесткого диска)
Я создаю свой поток, используя флаг kFSEventStreamCreateFlagFileEvents
, но мне трудно понять, как эти события генерируются ОС (или ядро, или что-то еще) И, к сожалению, нет документации с событиями, сгенерированными этим флагом ... Похоже, они новы для 10.7 и до сих пор не задокументированы.
Итак, моя основная проблема - " rename ». Когда я выполняю простое переименование, 2 kFSEventStreamEventFla События gItemRenamed отправляются на мой обратный вызов. Один содержит старое имя файла, второй - новое имя файла. Проблема возникает, когда вы переименовываете пакет файлов, эти события могут быть не последовательными. Например, это следующий случай:
Я могу получать события в следующем порядке:
И, похоже, нет никакого способа получить идентификатор первое событие переименования, когда вы поймаете второе ...Итак, что я сделал: при получении "переименованного" события я выполняю stat () с именем файла. Если статистика возвращается успешно, это означает, что это новое имя файла. Если нет, значит, старый. У меня все еще нет возможности связать оба события, но, по крайней мере, я могу обойтись, удалив старые файлы и добавив новые.
Итак, у меня в основном 2 вопроса:
Первый: я полностью слеп и не вижу очевидного способа правильно поймать "переименованное" событие через fsevents?
Второй i: Иногда у меня бывает странный баг, когда вместо 2 переименованных событий отправляются 3! Итак, я дважды добавляю файл ... Я не уверен, что это ошибка, или это связано с тем, что я полностью не использую fsevent API с флагом kFSEventStreamCreateFlagFileEvents
...
Любая помощь приветствуется, у меня совершенно нет идей, чтобы это исправить!