3

サブフォルダーとファイルの階層を含むフォルダーがあります。

定期的に、ファイル/フォルダが変更/削除/追加されているかどうかを確認する必要があります。

私は次のようなアルゴリズムをゼロから開発することを考えています。

  1. 樹木全体の表現を組み込みデータベース(SQLiteなど)またはファイルに保存します。
  2. 各ファイルのチェックサムを同じデータベースに保存します。
  3. 次の呼び出しで、このデータベースを実際のファイルシステムと比較します。
  4. 変更されたことが判明したものでデータベースの情報を更新します。
  5. 手順3から繰り返します。

プログラムの実行中に変更が発生する可能性があります。プログラムはいつでも閉じたり開いたりできます。
たとえば、ユーザーは月曜日にプログラムを閉じ、火曜日にファイルを編集し、水曜日にプログラムを再度開くことができます。その間に何が変わったかを確認する必要があるため、FileSystemWatcherを使用できません。

車輪の再発明をする前に、これを行うライブラリはすでにありますか?

ノート:

  • またはのようなVCSバイナリにアクセスできません。gitsvn
  • 言語はC#ですが、小さなJavaライブラリを移植する準備ができています。
  • これはオープンソースソフトウェア用であるため、オープンソースライブラリである必要があります。
  • デスクトップウィジェットに埋め込むためのものなので、軽いほど良いです。
4

3 に答える 3

2

おそらく、FileSystemWatcher(ネイティブ.NETクラス)を使用して目的を達成できます。

于 2012-08-31T05:12:43.303 に答える
2

あなたはFileSystemWatcherを探しています

ファイルシステムの変更通知をリッスンし、ディレクトリまたはディレクトリ内のファイルが変更されたときにイベントを発生させます。

于 2012-08-31T05:12:56.953 に答える
2

FileSystemWatcher を使用できない場合 (とにかく嫌いです。フレームワーク IMO で最も不安定なクラスです)、他の唯一のオプションは、ファイルを手動で追跡することです。ファイルが追加/削除または変更されたかどうかを確認するには、ファイル名とファイルの内容のハッシュを保存する必要があります。これを、C# ラッパーを持つ SQLExpress または SQLite のいずれかのデータベースを使用して保存します。

プログラムは開始/停止時にファイルをチェックし、実行中にタイマーを使用してファイルを定期的にチェックします。

編集:OPからの明確化。これをすぐに実行できるライブラリは知りません。ただし、自分で実装するのは簡単です。1 つのテーブルを備えた小さな DB と、コンソール アプリケーションまたは Windows サービスのタイマー コントロールは、必要なことを正確に実行します。

于 2012-08-31T05:40:18.923 に答える