これが重複した質問である場合は、謝罪することから始めます。FileSystemWatcher に関する質問は山ほどありましたが、私の問題に対処するものは見当たりませんでした。
わかりましたので、C# でディレクトリを監視するコンソール アプリケーションを作成しましたRoot
。Root
多くのサブフォルダーがあります。このアプリケーションの目的は、またはRoot
そのサブフォルダー内で .csv ファイルが作成、変更、または削除された場合に、ログ ファイルに書き込むことです。私は現在、これをうまく機能させています。唯一の問題は、.csv ファイルが作成、変更、または削除されると、実際には 3 つすべてのイベントが発生することです。
たとえば、Root
calledtest.csv
でファイルを作成すると、ログ ファイルは次のようになります。
10/04/2012: File F:/Root/test.csv Created
10/04/2012: File F:/Root/test.csv Changed
10/04/2012: File F:/Root/test.csv Created
10/04/2012: File F:/Root/test.csv Deleted
何が起こっているのかわからないので、ここに設定するコードがありますFileSystemWatcher
_watchFolder.Path = ConfigurationManager.AppSettings["RootToWatch"];
_watchFolder.Filter = ConfigurationManager.AppSettings["FileNameToWatch"];
_watchFolder.NotifyFilter = NotifyFilters.FileName
| NotifyFilters.LastWrite;
_watchFolder.IncludeSubdirectories = true;
_watchFolder.Changed += new FileSystemEventHandler(OnChanged);
_watchFolder.Created += new FileSystemEventHandler(OnChanged);
_watchFolder.Deleted += new FileSystemEventHandler(OnChanged);
_watchFolder.Renamed += new RenamedEventHandler(OnRenamed);
try
{
_watchFolder.EnableRaisingEvents = true;
}
catch (ArgumentException ex)
{
AbortMonitoring(ex.Message);
}
そして、ここに私のOnChangedイベントがあります(名前変更は同じですが、引数が異なります)
protected static void OnChanged(object sender, FileSystemEventArgs e)
{
//compile message to insert into log file.
string message = "File: " + e.FullPath + " " + e.ChangeType;
UpdateLogFile(message);
}