9

OK:iPhone OSアプリにファイル共有を実装しています。もちろん、これはファイルシステムの監視を意味します。わーい!

基本的に、OSは、ユーザーがiTunesのアプリのセクションにファイルを操作するときにアクセスできるディレクトリとの間でコピーおよび/または削除します。したがって、おそらくのような効率的なメカニズムを介して、ディレクトリの変更を監視する必要がありkqueue()ます。

ファイルのコピーが完了したことを確認するために、これを実装するにはどうすればよいですか?私は次のように考えていました:

  • で監視しkqueue()ます。
  • イベント時に、タイムアウトを開始(または既存のリセット)します。
  • タイムアウトが経過したら、作業を行います。

しかし、OSのつま先を踏み越えないようにするためのより良い方法はありますか?

4

2 に答える 2

3

これは部分的な答えにすぎませんが、多少役立つかもしれません。

  1. kqueueメカニズムは、アプリのDocumentsディレクトリが変更されたときに通知を受ける手段として実際に機能します。

  2. ディレクトリが変更されるとすぐに、ファイルのコピーが完了する前に通知が届きます。私はこれをテストで観察しました。

残念ながら、コピーが完了したときに通知の形式はありません。少なくとも、私が見つけたものはありません。

Appleが気付くといいのは、これは一般的な問題のように思われるので、「iTunessynch」の通知が行われる必要があるということです。

新しいファイルの変更時刻が変更されていないかどうかをチェックするループが機能する場合がありますが、ほとんどの場合のみです。極端な状況では、iOSは一時停止して、バックグラウンドで独自のあらゆる種類の時間のかかる作業を実行できます。

特定のファイルが別のプロセスによって開かれているかどうかを確認する方法がある場合は、これで十分です。

ジェフ

于 2010-08-25T00:53:26.090 に答える
0

これを実装しました

キューの代わりにディスパッチソースを使用しますが、正常に機能します。

README:

FileSystemEventPublisher

ファイルシステムの変更を追跡する発行元。

使用例:

let cancellable = DispatchSource.publish(
  .all,
  for: FileManager.default.temporaryDirectory
)
.receive(on: RunLoop.main)
.sink { event in
  print(event)
}
//.
//.
//.
cancellable.cancel()
于 2021-06-08T05:26:04.420 に答える