Получить полный путь измененного файла с помощью SCEvents (оболочка FSEvents)?
Я реализовал часть средства просмотра файлов, используя SCEvents: https://github.com/mz2/SCEvents Он уведомляет меня, когда файл создается, изменяется, удаляется или переименовывается следующим образом:
2014-02-11 16: 08: 38.725 TestSCEvent10-2 [2995: 403] SCEvent {eventId = 3182336, eventPath = / Users / user1 / Desktop, eventFlags = 131328}
Возвращает путь родительского каталога. Как мне получить полный путь к измененному файлу?
1 ответ
В файле SCEvents.m
Добавьте константу FSEventStreamCreateFlags kFSEventStreamCreateFlagFileEvents к флагам FSEventStreamCreate, как показано здесь:
static FSEventStreamRef _create_events_stream(SCEvents *watcher, CFArrayRef paths, CFTimeInterval latency, FSEventStreamEventId sinceWhen)
{
FSEventStreamContext callbackInfo;
callbackInfo.version = 0;
callbackInfo.info = (void *)watcher;
callbackInfo.retain = NULL;
callbackInfo.release = NULL;
callbackInfo.copyDescription = NULL;
return FSEventStreamCreate(kCFAllocatorDefault,
&_events_callback,
&callbackInfo,
paths,
sinceWhen,
latency,
kFSEventStreamCreateFlagUseCFTypes | kFSEventStreamCreateFlagWatchRoot |kFSEventStreamCreateFlagFileEvents);
}
kFSEventStreamCreateFlagFileEvents
Запросить уведомления на уровне файлов. Ваш поток будет получать события об отдельных файлах в иерархии, которую вы просматриваете, а не только получать уведомления уровня каталога. Используйте этот флаг осторожно, так как он будет генерировать значительно больше событий, чем без него. Доступный в OS X v10.7 и позже.
Объявлено в FSEvents.h.
обсуждение
Флаги, которые могут быть переданы в функции FSEventStreamCreate...() для изменения поведения создаваемого потока.
Будет изменен eventPath для вывода полного пути к файлу.
ОБНОВИТЬ:
Также в файле In SCEvents.m есть параметр Latency Setting.
// Константы статические const CGFloat SCEventsDefaultNotificationLatency = 3.0;
Может быть установлен на 3,0. Я установил мой на 8.00.
параметр "latency", который сообщает, как долго ждать события после его пересылки; это уменьшает объем событий и уменьшает вероятность того, что клиент увидит "промежуточное" состояние, подобное тем, которые возникают при "безопасном сохранении" файла, создании пакета или загрузке файла через Safari ".