Я пытаюсь использовать FSEvents, чтобы определить, когда файлы были добавлены / удалены из определенной папки. На данный момент я реализовал простую оболочку для FSEvents, и она отлично работает: я получаю все события.
НО проблема, с которой я столкнулся сейчас, заключается в том, что когда я переименовываю файл в Finder, я ловлю 2 разных события: первое с типом «переименовано» со старым именем файла, а другое с «переименованным» и новым имя файла. Идентификаторы событий отличаются для обоих вызовов.
Итак, как мне узнать, какое "переименованное" событие содержит старое имя, а какое событие содержит старое ?? Я попытался посмотреть в документации, но, к сожалению, kFSEventStreamEventFlagItemRenamed не задокументирован ... он кажется новым в Lion.
PS: единственный способ, которым я мог придумать, был: при переименованном событии я проверяю свой интерфейс, чтобы увидеть, есть ли у меня элемент, соответствующий пути события. Если так, я отмечаю это для переименования. Если нет, я проверяю, был ли элемент помечен для переименования, и если да, то я переименовываю его в новый путь события. Но мне действительно не нравится эта идея ...
Редактировать: Хорошо, я что-то реализовал по линии моего «PS»: я заметил, что при переименовании чего-то, идентификаторы двух событий являются последовательными, так что с идентификатором события, содержащего новое имя, я могу получить событие, содержащее старое имя. Я просто использую небольшой словарь в своем интерфейсе для хранения идентификаторов и связанных путей в случае «переименованного» события.
В любом случае, теперь я могу ловить события переименования и даже перемещать события: когда вы перемещаете файл, это «переименованное» событие, которое перехватывается FSEventStream ...
Но у меня осталась еще одна проблема: удаление. Когда я что-то удаляю, он перемещается в корзину: я получаю событие «переименовано». Но проблема в том, что я не получаю второе событие переименования. Только «измененное» событие в файле .DS_Store. Я думаю, что этот файл используется Finder, чтобы узнать, какие файлы находятся в корзине и т. Д. Поэтому я могу проверить изменение этого файла и получить последнее «переименованное» событие, чтобы обнаружить, что файл был отправлен в корзину. Но я использую TotalFinder, который использует Asepsis, который изменяет способ, которым Finder хранит файлы .DS_Store: я больше не получаю «измененный» на этом.
Подводя итог: я не могу определить, когда файл отправляется в корзину ...
Есть идеи, как я могу это сделать? Может быть, использовать что-то еще, кроме FSEvents, чтобы поймать только это событие?