Наблюдение за файлом или папкой в ​​Objective-C

Каков наилучший способ прослушивания папки или файла, чтобы узнать, была ли она сохранена или добавлен новый файл?

    API FSEvents идеально подходит, если вы просто хотите посмотреть каталоги, но он не обрабатывает мониторинг отдельных файлов. У Stu Connolly есть отличная обтекатель Objective-C для API FSEvents C, он называется SCEvents, и вы можете получить его здесь:

    http://stuconnolly.com/blog/scevents-011/

    Хорошая вещь о FSEvents заключается в том, что вам просто нужно посмотреть одну папку, и вы будете уведомлены о любых изменениях, которые происходят где угодно в иерархии подпапок этой папки.

    Если вам нужны уведомления на уровне файлов, вам нужно будет использовать kqueues. Ули Кастерер имеет отличную обертку Objective-C:

    http://zathras.de/angelweb/sourcecode.htm#UKKQueue

    Любой из этих методов намного проще, чем спорить с API-интерфейсом C напрямую, которые не особенно хорошо документированы и немного тупые.

    Если вам нужна поддержка Tiger, вам нужно будет использовать kqueues, поскольку API FSEvents официально не был доступен в 10.4.

    Попробуйте использовать FSEvents , хотя это C API

    OS 10.5 или новее

    Если вы меняете файл или папку, я считаю, что поисковая система Spotlight обновит свою базу данных, чтобы отразить ваши изменения.

    Таким образом, вы можете настроить stream, который прослушивает уведомления kMDQueryDidUpdateNotification через запрос Spotlight, специфичный для этого файла или папки.

    Когда вы получите эти уведомления, вы можете запустить селектор, который сделает что-то нужное.

    Если вам нужно использовать kqueue (как обсуждается в других ответах), у Google Toolbox для Mac есть хорошая обтекатель Objective-C, который я использовал без проблем до сих пор.

    Не уверен, что это лучший способ, но одним из способов было бы запустить NSThread, который будет регулярно (например, каждую секунду) проверять даты создания файлов в каталоге, а затем иметь делегат, связанный с этим streamом, для выполнения некоторых действий когда добавлен новый файл

    Давайте будем гением компьютера.