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