Подход стат имеет условие гонки: например, может быть цепной ход, поэтому стат на пути в середине последовательности потерпит неудачу.

аюсь использовать FSEvents, чтобы определить, когда файлы были добавлены / удалены из определенной папки. На данный момент я реализовал простую оболочку для FSEvents, и она отлично работает: я получаю все события.

НО проблема, с которой я столкнулся, заключается в том, что когда я переименовываю файл в Finder, я улавливаю 2 различных события: первое с типом «переименовано» со старым именем файла, а другое с «переименованным» и новым именем файла. Идентификаторы событий различны для обоих вызовов.

Итак, как мне узнать, какое «переименованное» событие содержит старое имя, а какое событие содержит старое? Я попытался посмотреть в документации, но, к сожалению, kFSEventStreamEventFlagItemRenamed не задокументирован ... он кажется новым в Lion.

PS: единственный способ, которым я мог придумать, был: при переименованном событии я проверяю свой интерфейс, чтобы увидеть, есть ли у меня элемент, соответствующий пути события. Если так, я отмечаю это для переименования. Если нет, я проверяю, был ли элемент помечен для переименования, и если да, то я переименовываю его в новый путь события. Но мне действительно не нравится эта идея ...

Редактировать: Хорошо, я что-то реализовал в соответствии с моим «PS»: я заметил, что при переименовании чего-то, идентификаторы 2 событий являются последовательными, так что с помощью идентификатора события, содержащего новое имя, я могу получить событие содержащий старое имя. Я просто использую небольшой словарь в своем интерфейсе для хранения идентификаторов и связанных путей в случае «переименованного» события.

В любом случае, теперь я могу ловить события переименования и даже перемещать события: когда вы перемещаете файл, это «переименованное» событие, которое перехватывается FSEventStream ...

Но у меня остается еще одна проблема: удаление. Когда я что-то удаляю, он перемещается в корзину: я получаю событие «переименовано». Но проблема в том, что я не получаю второе событие переименования. Только «измененное» событие в файле .DS_Store. Я думаю, что этот файл используется Finder, чтобы узнать, какие файлы находятся в корзине и т. Д. Поэтому я могу проверить изменение этого файла и получить последнее «переименованное» событие, чтобы обнаружить, что файл был отправлен в корзину. Но я использую TotalFinder, который использует Asepsis, который изменяет способ, которым Finder хранит файлы .DS_Store: я больше не получаю «измененный» на этом. Подводя итог: я не могу определить, когда файл отправляется в корзину ...

Есть идеи, как я могу это сделать? Может быть, использовать что-то еще, кроме FSEvents, чтобы поймать только это событие?

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

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