2010-06-04 3 views
8

ОК: Я реализую общий доступ к файлам в приложении для iPhone OS, и, конечно же, это означает, что мониторинг файловой системы. Ура!Каков оптимальный способ отслеживания изменений в каталоге с помощью kqueue()?

В основном ОС копирует и/или удаляет из и в каталог, к которому я могу получить доступ, когда пользователь манипулирует файлами в разделе моего приложения в iTunes. Таким образом, мне нужно контролировать каталог для изменений, предположительно, с помощью эффективного механизма, такого как kqueue().

Как это реализовать, чтобы я знал, что файлы закончили копирование? Я думал по линиям:

  • Монитор с kqueue().
  • В случае, начните (или сбросьте существующий) таймаут.
  • По истечении тайм-аута выполняйте работу.

но есть ли лучший способ сделать это, что гарантирует, что я не перешагнув пальцы на ОС?

ответ

3

Это лишь частичный ответ, но может быть несколько полезен.

  1. Механизм kqueue действительно работает как средство для уведомления при изменении каталога документов приложения.

  2. Уведомление приходит сразу после изменения каталога и перед копированием файла. Я наблюдал это при тестировании.

К сожалению, при копировании нет формы уведомления. По крайней мере, ни одного, что я нашел.

Что я надеюсь, что Apple осознает, что необходимо уведомление о «iTunes synch», потому что это, по-видимому, общая проблема.

Проверка петли, если время изменения нового файла не меняется, может работать, но только в большинстве случаев. В некоторых экстремальных обстоятельствах iOS может сделать паузу, чтобы выполнять все свои собственные работы в фоновом режиме.

Если есть способ проверить, открыт ли какой-либо файл другим процессом, этого будет достаточно.

Geoff

Смежные вопросы