私のアプリでは iTunes ファイル共有がオンになっており、ユーザーが iTunes にファイルを追加すると、検出できるはずです。
Application Delegate の次の関数が呼び出されていましたが、現在は呼び出されていません。
- (void)applicationDidBecomeActive:(UIApplication *)application
代替ソリューションはありますか?
私のアプリでは iTunes ファイル共有がオンになっており、ユーザーが iTunes にファイルを追加すると、検出できるはずです。
Application Delegate の次の関数が呼び出されていましたが、現在は呼び出されていません。
- (void)applicationDidBecomeActive:(UIApplication *)application
代替ソリューションはありますか?
解決策があります:GCD。GCD を使用するとdispatch_source_t
、ディレクトリへの書き込みなど、vnode の変更を監視し、それについて通知する を作成できます。基本は次のとおりですopen(path, O_EVTONLY)
。syscallを使用してディレクトリへのファイル記述子を取得し、呼び出してタイプおよびマスクとしてdispatch_source_create()
渡します。を使用してイベント ハンドラーを設定し、ファイルがディレクトリに書き込まれたときに必要な処理を行います。さらに、ファイル記述子を閉じるために呼び出すキャンセル ハンドラーも設定する必要があります。最後に、呼び出して監視を開始します。DISPATCH_SOURCE_TYPE_VNODE
DISPATCH_VNODE_WRITE
dispatch_source_set_event_handler
close()
dispatch_resume()
ファイルがいつ追加または削除されたかを検出する代わりに、監視対象のフォルダー内のファイルが変更されたかどうかを知りたい場合、この質問は依然として有効です。これを DISPATCH_VNODE_WRITE で動作させることに成功しませんでした。
はい、フォルダー内でファイルが追加、削除、または名前変更されたときに DISPATCH_VNODE_WRITE イベントが発生するのは事実です (ただし、ここにも問題があります。これら 3 つのうちどれが発生したかを調べるには、フォルダーのコンテンツのスナップショットを作成する必要があります)。それらを比較してください - うーん!)。しかし、フォルダーの既存のファイルが変更された場合、通知はありません。DISPATCH_VNODE_EXTEND と DISPATCH_VNODE_ATTRIB も試しましたが、成功しませんでした。数百または数千のファイルを含むディレクトリがある場合、ファイルが変更されたかどうかをどのように確認するのでしょうか?
非推奨の Carbon FSEventsライブラリは、GCD + ディスパッチ ソース アプローチ IMO よりも柔軟で強力でした。
アプリが最後に使用したファイルの MD5 ハッシュを保存できます。アプリを起動するたびに、監視しているファイルから新しいハッシュを計算します。ハッシュが以前に保存したものと異なる場合、ファイルは変更されています。
ファイル MD5 ハッシュを計算するためのソリューションは次のとおりです。 MD5 ハッシュ ファイルの計算