2011-07-19 8 views
0

こんにちは私は、ファイルに関する情報を格納するsqliteを使用して自分のアプリケーションのための単純な音楽ライブラリを作成しようとしています。ライブラリを構成するファイルが変更されたときにデータベースを更新する方法を知りたい。私は、DBを更新する必要があるかどうかを考え出すと考えファイルのコレクションを監視および同期するにはどうすればよいですか?

  • 一つの方法は、データベース内のファイル数対ライブラリーを構成するファイルの数を数えることです。この方法は、何千ものファイルがあっても時間がかかるようです。これを行うより良い方法はありますか?

  • 実際に各ファイルをもう一度やり取りすることなく、アーティスト、アルバムなどのファイル情報を取得せずにデータベースを「更新」し、ファイルを追加または削除する必要があるかどうかをdbと比較しますデータベース?

答えて

0

いくつかの手法を使用できます。

  1. 最後に変更されたタイムスタンプが変更されたかどうかを確認するために、ユーザーが追加したすべてのディレクトリをスキャンします。ファイルを再スキャンした場合。必要に応じて、優先度の低い別のスレッドでこれを実行できます。
  2. ユーザーがUIでオーディオトラックをクリックすると、ファイルが再スキャンされます。それが存在しない場合は、ユーザーに警告し、エントリを削除します。存在する場合はタイムスタンプをチェックし、それに応じて更新してください。
  3. ライブラリ全体を再スキャンするオプションをユーザーに提供します。
  4. ソングが変更されていることがわかっているフォルダのタイムスタンプがある場合は、それをすべてのサブフォルダと一緒に再スキャンして、それに従ってライブラリを更新することができます。
  5. ファイルがまだ存在する場合は、おそらくデータベースから削除する必要はありません。

(作成され、変更された)ファイルのタイムスタンプをチェックすると、データベースに何か更新を加える必要があるかどうかを知ることができます。

変更の可能性があることをユーザーに警告し、検出された変更の種類に基づいて再スキャンするかどうかを尋ねることもできます。サブディレクトリをトラバースして数千のファイルを処理することは、おそらくあなたが思うほど多くの時間を取ることはないでしょう。

ファイルを再スキャンするときに、実際にデータベースの既存のレコードと比較する必要はありません。ちょうどSQL UPDATEを実行してください。あなたがすでにSQLに精通していないなら、ネット上で利用可能ないくつかの例文を勉強して試してみることをお勧めします。スキャンしたファイルごとに1つのSQLトランザクションを実行すると、それはかなり長い時間がかかります。

+0

お返事ありがとうございます。 1.誰かが音楽ライブラリフォルダを持っていて、その中に音楽がすべて*含まれている場合、トップレベルのフォルダだけがファイルの追加/削除時に「変更された」タイムスタンプを変更します。だからこれで私はいつdbを更新するのか知っていますが、私はまだすべてをスキャンし、結果として私のdbで変更する必要があるものを区別する必要があります。 2.これはフィーチャ= pよりもプログラムエラーのようです。 3.私はすでにこれを行っていますが、プロセスを簡単に自動化できるかどうかを知りたかったのです。 SQL Updateは、指定されたレコードのデータを変更するだけです。レコードを効率的に追加/削除する方法がわかりません。 – Tricky

+0

元の質問を編集し、追加の考えを追加する必要があります。これにより、適切なソリューションが見つかるまで、自分自身や他の人が私たちの反応を洗練させることができます。 –

関連する問題