Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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.

Ответ 2

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

OS 10.5 или новее

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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