Какао, FSEvents, флаг kFSEventStreamCreateFlagFileEvents и «переименованные» события

Я играл сFSEvents в моем небольшом приложении для синхронизации содержимого моего приложения с тем, что находится на жестком диске (в основном это небольшая программа просмотра изображений, и я хочу, чтобы ее содержимое обновлялось при изменении содержимого жесткого диска)

Я создаю свой поток, используяkFSEventStreamCreateFlagFileEvents флаг, но мне сложно разобраться, как эти события генерируются ОС (или ядром, или чем-то еще) И, к сожалению, нет документации по событиям, генерируемым с этим флагом ... Кажется, они новы в 10.7 и до сих пор не документировано.

Итак, моя главная проблема - «переименовать». Когда я делаю простое переименование, 2 события kFSEventStreamEventFlagItemRenamed отправляются на мой обратный вызов. Один содержит старое имя файла, второй содержит новое имя файла. Проблема возникает, когда вы переименовываете пакет файлов, эти события могут быть не последовательными. Например, это следующий случай:

"file1" -> "new_file_1""file2" -> "new_file_2"

Я мог бы получать события в следующем порядке:

"переименован" / "file1""переименован" / "file2""переименован" / "new_file_1""переименован" / "new_file_2"

И, кажется, нет никакого способа получить идентификатор первого события переименования, когда вы перехватываете второе ... Так что я сделал: при получении события «переименованный» я делаю stat () с имя файла. Если статистика возвращается успешно, это означает, что это новое имя файла. Если нет, значит это старый. У меня все еще НЕТ СПОСОБА связывать оба события, но, по крайней мере, я могу обойти, удалив старые файлы и добавив новые.

Итак, у меня есть два вопроса:

Первый: я полностью слепой и не вижу очевидного способа правильно поймать «переименованное» событие через fsevents?

Второй я: у меня иногда возникает странная ошибка, когда вместо 2 переименованных событий отправляются 3! Таким образом, я получаю файл, добавленный дважды ... Я не уверен, является ли это ошибкой, или это происходит из-за того, что я полностью не использую fsevent API сkFSEventStreamCreateFlagFileEvents флаг ...

Любая помощь приветствуется, у меня совершенно нет идей, чтобы это исправить!

Ответы на вопрос(2)

Ваш ответ на вопрос