Получить полный путь измененного файла с помощью 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 ".

Другие вопросы по тегам