質問
指定されたディレクトリの変更や追加を監視し、その情報をデータベースに保存する C# アプリケーションを構築しています。
個々のファイルの変更をチェックすることは避けたいのですが、ファイルのアクセス時間を完全に信頼できるかどうかはわかりません。
ディレクトリ内で最近変更されたファイルを取得するために使用する最良の方法は何でしょうか?
ユーザーが要求した場合にのみ変更をチェックし、常に実行されるサービスではありません。
解決
ふーむ...興味深い質問。最初に私があなたに指摘するのは、 ファイルシステムウォッチャー クラス。ただし、ユーザーの要求に応じて機能させる場合は、最初にディレクトリ情報を保存し、ユーザーが要求するたびに比較する必要があるように思えます。おそらく FileSystemWatcher を使用して、とにかく結果を保存することになるでしょう。
他のヒント
FileSystemWatcher オブジェクトを使用します。ここにあなたが探していることを行うためのコードがあります。
// Declares the FileSystemWatcher object FileSystemWatcher watcher = new FileSystemWatcher(); // We have to specify the path which has to monitor watcher.Path = @"\\somefilepath"; // This property specifies which are the events to be monitored watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | notifyFilters.DirectoryName; watcher.Filter = "*.*"; // Only watch text files. // Add event handlers for specific change events... watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnChanged); watcher.Deleted += new FileSystemEventHandler(OnChanged); watcher.Renamed += new RenamedEventHandler(OnRenamed); // Begin watching. watcher.EnableRaisingEvents = true; // Define the event handlers. private static void OnChanged(object source, FileSystemEventArgs e) { // Specify what is done when a file is changed, created, or deleted. } private static void OnRenamed(object source, RenamedEventArgs e) { // Specify what is done when a file is renamed. }
あなたが望むものは、によって提供されると思います ファイルシステムウォッチャー クラス。
このチュートリアルでは、これを使用して、単純な Windows サービスのディレクトリの変更を監視する方法について説明します。 C# で単純な Filewatcher Windows サービスを実装する方法
常にではなく、ユーザーが要求したときのみチェックする必要がある場合は、FileSystemWatcher を使用しないでください。特に共有リソースの場合は、50 台のクライアント マシンが同じ共有ディレクトリを監視することは絶対に避けるべきです。
おそらく単なるタイプミスですが、ファイルのアクセス時間を見る必要はなく、変更を検出するためにファイルの変更時間を確認する必要があります。それさえ信頼できません。
私がやろうとしているのは、ファイルの日付とバイト サイズ、またはその他のファイル システム プロパティに対して、ある種のチェックサム関数を実装することです。そうすれば、ファイル全体の変更を探す必要がなく、そのプロパティのみを変更することができ、リモート リソースへの接続を保持して監視しようとするのではなく、要求に応じて変更を行うことができます。
より強力な解決策は、その逆を実行し、ファイルを監視して変更を記録できるサービスを共有ドライブをホストするマシンにインストールすることです。そうすれば、ファイルにまったく触れずにサービスにクエリを実行できますが、それはおそらくやりすぎです。