お世話になっております。
首記の件で、相談させてください。
FileSystemWatcherで社内のファイルサーバーに存在するフォルダを監視するプログラムを作成したのですが
ネットワークが不安定な時間があるらしく、一度でもネットワークが切れるとイベントをキャッチできなくなるような状況になっております。
対応をいくつか考えたのですが、どうにもうまくいかない為、何かアドバイスをいただければ幸いです。
対応1
非同期で一定間隔おきにStartwatchingを呼び出し
⇒多重で動作するため、いずれオーバーフロー?
対応2
対策1に加え、stopwatchingを呼び出してからStartwatchingで動作をリセットできないか?
⇒多重で起動し続けました
対応3
一定間隔でアプリケーションを再起動
⇒アプリケーションを落とせても、起動ができず。⇒色々試行錯誤中です。
対策1、2で多重で呼び出さないようにFileSystemWatcherをうまくリセットできればいいのですが、どのようにすればいいか全くわかりませんでした・・・。
どなたかご教示いただけますと幸いです。
環境;
windows10
VS2019
.NET Core 3.1.14
C#
1using System; 2using System.IO; 3 4static class TextFileWatcher 5{ 6 private static FileSystemWatcher Watcher; 7 8 public static void StartWatching() 9 { 10 var Watcher = new FileSystemWatcher(); 11 12 // 監視するパス 13 Watcher.Path = @"●●●"; 14 15 // ファイル名と最終書き込み時間 16 Watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName; 17 18 // フィルタで監視するファイルを.txtのみにする 19 Watcher.Filter = "*.txt"; 20 21 // サブディレクトリ以下も監視する 22 Watcher.IncludeSubdirectories = true; 23 24 // 変更発生時のイベントを定義する 25 Watcher.Created += Changed; // 新規作成 26 Watcher.Changed += Changed; // 変更 27 Watcher.Deleted += Changed; // 削除 28 Watcher.Renamed += Changed; // リネーム 29 30 // 監視開始 31 Watcher.EnableRaisingEvents = true; 32 33 // 必要がなくなったら監視終了処理(StopWatching)を呼ぶ 34 } 35 36 public static void Changed(object source, FileSystemEventArgs e) 37 { 38 switch (e.ChangeType) 39 { 40 case WatcherChangeTypes.Created: 41 Console.WriteLine($"新規作成: {e.FullPath}"); 42 break; 43 case WatcherChangeTypes.Deleted: 44 Console.WriteLine($"削除: {e.FullPath}"); 45 break; 46 case WatcherChangeTypes.Changed: 47 Console.WriteLine($"変更: {e.FullPath}"); 48 break; 49 case WatcherChangeTypes.Renamed: 50 var renameEventArgs = e as RenamedEventArgs; 51 Console.WriteLine($"リネーム: {renameEventArgs.OldFullPath} => {renameEventArgs.FullPath}"); 52 break; 53 } 54 } 55 56 public static void StopWatching() 57 { 58 if (Watcher != null) 59 { 60 Watcher.EnableRaisingEvents = false; 61 Watcher.Dispose(); 62 } 63 } 64}
あなたの回答
tips
プレビュー