2011-12-15 14 views
1

ファイル操作(追加/削除/名前変更)のために、フォルダとそのサブディレクトリを監視する必要があります。私はFileSystemWatcherについて読んだことがありますが、プログラムが実行されるたびに、あるいはユーザーが「変更を確認」ボタンを押すたびに変更を監視したいと思っています(FSWはランタイム検出に向いています)。私の最初の考えは、すべての(サブ)ディレクトリを繰り返して各ファイルをハッシュすることでした。次に、(順序付けられた)すべてのハッシュを連結し、それをハッシュします。変更を確認したいときは、プロセスを繰り返して、ハッシュが同じかどうかを確認します。ディレクトリの変更を検出する

これは効率的な方法ですか? また、変更を検出したら、できるだけ早く追加、削除、または名前を変更したファイルがどのように見つかっていますか?

エンドユーザーに何もインストールする必要がなく、スクリプトがC#アプリケーションに変更を通知できる限り、スクリプトの実行速度が速い場合は、スクリプトを使用しても構いません。

+0

あなたが探していることと、FileSystemWatchnerが必要としないことを正確には分かりません。 – kenny

+0

AFAIK、FSWは、プログラムがシャットダウンしてから再びオンになるまでのファイルの変更を検出しません。 – XSL

答えて

2

これは、すべての検出されたファイルをデータベースに格納し、最終更新時刻とともに処理することで処理します。

ファイルを通過するたびに、各ファイルのデータベースをチェックします。DBに存在しない場合は新しいもので、存在する場合はタイムスタンプが異なる場合は変更されています。

また、データベース内のすべてのファイルをパスの前にToBeDeleteedとしてマークし、ファイルが見つかった場合はこれをクリアすることによって、削除されたファイルを処理するオプションもあります。次に、プロセスの最後に、ToBeDeletedとしてマークされているすべてのレコードを削除するだけです。

2

明らかに、ディレクトリツリーの「スナップショット」を作成し、必要に応じてそれらを比較する必要があります。正確にスナップショットに入るのはあなたの必要条件に依存します。ファイルサイズと最終更新時間は、ファイルが持っているか持っていることは良いと安価な指標である

  • あなたは「新しい」を検出するために、ファイル名を格納する必要が

    • と「削除」のファイル:ことを覚えておいてください変更されていませんが、保証は提供されません
    • ファイルの内容をハッシュすることは、ファイルが大きくなる可能性がある場合、非常に高価になる可能性がありますが、完全な精度で変更されたことを知る唯一の方法ですも衝突する可能性があるので、数学的な100%の確実性が十分にあるとは限りません)。
    関連する問題