Насколько я испытал это, ваше предположение не всегда верно. В FSEventStreamCreate вы будете пропускать латентность, а также флаг для значения латентности kFSEventStreamCreateFlagNoDefer
. Поэтому события могут или не могут совпадать с тем же обратным вызовом. Кроме того, есть разные способы переименования файла. Некоторые Filesystem-API фактически переименовывают файл, сохраняя индекс inode как mv
, другие, такие как NSDocument, создают новый индексный дескриптор. Иногда вы получаете kFSEventStreamEventFlagItemRenamed в обратном вызове, иногда нет.
EDIT: Альтернативы FSEvents являются Kernel Queues и NSFileCoordinator
FSEvents каким-то образом не полностью документированы в API-Docs. Посмотрите на файл заголовка FSEvent.h, там есть еще что прочитать.
Затем, чтобы легко увидеть, что происходит для переименования, запустите приложение и выполните переименование с помощью Finder с терминальным mv, а также в приложении на основе документов, используя маленький треугольник справа от имени файла.
Спасибо mahal, я установил латентность 0, как вы думаете, в этом случае должен произойти тот же обратный вызов? Но независимо от того, знаете ли вы в том же CB, если старое/новое событие переименования должно быть X и X + 1 идентификатором события? – Noitidart
Спасибо @mahal за ваши изменения! :) Вы имеете в виду для очередей ядра: https://developer.apple.com/library/mac/documentation/Darwin/Conceptual/FSEvents_ProgGuide/KernelQueues/KernelQueues.html – Noitidart
@Noitidart помог вам? если да, вы хотели бы принять его, используя зеленую галочку слева от моего ответа? –