0

Windows サービスのディレクトリ内のファイルを常に読み取るための優れたソリューションを探しています。現在、FileSystemWatcher を使用して、ディレクトリに追加される xml ファイルを処理しています。これは、サービスの実行中にうまく機能します。ただし、何らかの理由でサービスが停止した場合、サービスの停止中にディレクトリに追加されたファイルは処理されません。考えられる最善の解決策は何ですか?以下は、FileSystemWatcher のコードです。おそらく FileSystemWatcher はこれを行うことができますが、間違って使用している可能性があります。

// Setup FileSystemWatcher to watch 'IN' directory...
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = ConfigurationManager.AppSettings["InputPath"];
watcher.EnableRaisingEvents = true;
watcher.Filter = "*.xml";
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName;
watcher.Created += new FileSystemEventHandler(FileAdded);
4

2 に答える 2

3

起動と監視という 2 つの異なるユース ケースについて述べています。FileSystemWatcher は単に監視用です。

ただし、起動時にファイルシステム自体を調べて、待機中のファイルがあるかどうかを確認し、待機している場合はそれらに対処する必要があります。理想的には、FileAdded 関数を使用できるようにするか、少なくとも FileAdded で同じ関数を呼び出してファイルを処理できるようにする必要があります。

起動時に、次の単純なループを実行します。FileSystemEventHandler コードを追加します。

于 2013-02-06T21:49:19.940 に答える
0

FileSystemWatcherアクティブな間のみ、ファイルへの現在の変更を表示できます。そうでないときに変更をキャッチするには、別の永続的な (外部ファイル、DB) リストでそれらを追跡する必要があります。起動時に、プロセスはディレクトリ内のファイルをリストと照合して、新しいファイルがあるかどうかを確認する必要があります。

その他の注意点: システムがおそらく遅い接続から書き込まれているディレクトリを監視している場合 (たとえば、FTP ディレクトリを監視している場合)、別のウォッチャーまたはファイルがまだ変更されていないことを確認する他のメカニズムをセットアップする必要があります。追加された後の期間。

また、他の場所で述べたように、ディレクトリが忙しすぎないように注意してください。そうしないと、更新を見逃すことになります。

于 2013-02-06T22:00:10.083 に答える