指定されたディレクトリの変更と追加を監視し、その情報をデータベースに保存する C# アプリケーションを構築しています。
個々のファイルの変更をチェックすることは避けたいのですが、ファイルのアクセス時間を完全に信頼できるかどうかはわかりません。
ディレクトリ内の最近変更されたファイルを取得するために使用する最良の方法は何ですか?
ユーザーが要求した場合にのみ変更をチェックします。常に実行されるサービスではありません。
指定されたディレクトリの変更と追加を監視し、その情報をデータベースに保存する C# アプリケーションを構築しています。
個々のファイルの変更をチェックすることは避けたいのですが、ファイルのアクセス時間を完全に信頼できるかどうかはわかりません。
ディレクトリ内の最近変更されたファイルを取得するために使用する最良の方法は何ですか?
ユーザーが要求した場合にのみ変更をチェックします。常に実行されるサービスではありません。
FileSystemWatcher オブジェクトを使用します。ここにあなたが探していることをするためのいくつかのコードがあります。
// FileSystemWatcher オブジェクトを宣言します
FileSystemWatcher ウォッチャー = new FileSystemWatcher();
// 監視するパスを指定する必要があります
watcher.Path = @"\\somefilepath";
// このプロパティは、監視するイベントを指定します
watcher.NotifyFilter = NotifyFilters.LastAccess |
NotifyFilters.LastWrite | NotifyFilters.FileName | notifyFilters.DirectoryName;
watcher.Filter = "*.*"; // テキスト ファイルのみを監視します。
// 特定の変更イベントのイベント ハンドラーを追加します...
watcher.Changed += 新しい FileSystemEventHandler(OnChanged);
watcher.Created += 新しい FileSystemEventHandler(OnChanged);
watcher.Deleted += 新しい FileSystemEventHandler(OnChanged);
watcher.Renamed += 新しい RenamedEventHandler(OnRenamed);
// 監視を開始します。
watcher.EnableRaisingEvents = true;
// イベント ハンドラを定義します。
private static void OnChanged(オブジェクト ソース, FileSystemEventArgs e)
{
// ファイルが変更、作成、または削除されたときの処理を指定します。
}
private static void OnRenamed(オブジェクト ソース, RenamedEventArgs e)
{
// ファイルの名前が変更されたときの動作を指定します。
}
あなたが望むものはFileSystemWatcherクラスによって提供されると思います。
このチュートリアルでは、単純な Windows サービスでディレクトリの変更を監視するためにそれを使用する方法について説明します。C# でシンプルなファイルウォッチャー Windows サービスを実装する方法
常にチェックするのではなく、ユーザーが要求したときにのみチェックする必要がある場合は、FileSystemWatcher を使用しないでください。特に共有リソースの場合は、同じ共有ディレクトリを 50 台のクライアント マシンで監視する必要はありません。
おそらく単なるタイプミスですが、ファイルのアクセス時刻を確認するべきではありません。ファイルの変更時刻を確認して、変更を検出する必要があります。それさえ頼りない。
私がすることは、ファイルの日付とバイトサイズ、またはその他のファイルシステムのプロパティにある種のチェックサム機能を実装することです。そうすれば、完全なファイルの変更を探す必要はありません。リモート リソースへの接続を保持して監視するのではなく、ファイルのプロパティだけを探し、要求に応じて変更を行うことができます。
より重い解決策は、逆の方法で実行し、共有ドライブをホストしているマシンにサービスをインストールして、ファイルを監視し、変更を記録することです。次に、ファイルにまったく触れるのではなく、サービスにクエリを実行できますが、おそらくやり過ぎです。
うーん...興味深い質問です。まず、FileSystemWatcherクラスについて説明します。ただし、ユーザーの要求に応じて機能させる場合は、最初にディレクトリ情報を保存してから、ユーザーが要求するたびに比較する必要があるようです。私はおそらく FileSystemWatcher を使用して、とにかく結果を保存するだけです。