Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpFsFw 234 of 509 menu
◀ ▶

Наблюдение FileSystemWatcher в C#

Наблюдатель FileSystemWatcher вызывает обработчики из фонового потока. Событие приходит после записи на диск, поэтому ждут сигнал. Короткой паузы для этого мало.

Подпишемся на Created и Changed, включим EnableRaisingEvents и дождемся сигнала через ManualResetEventSlim. Фильтр NotifyFilter оставляет смену имени и смену времени записи. В seen попадает имя из первого события, повторное Changed его не затирает. Без ожидания seen часто остаётся пустым, потому что событие может прийти с задержкой:

string dir = Path.Combine(Path.GetTempPath(), "watch-" + Guid.NewGuid().ToString("N")); Directory.CreateDirectory(dir); using ManualResetEventSlim signal = new ManualResetEventSlim(false); string seen = ""; using (FileSystemWatcher watcher = new FileSystemWatcher(dir)) { watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite; watcher.Created += (_, e) => { seen = e.Name ?? ""; signal.Set(); }; watcher.Changed += (_, e) => { if (seen.Length == 0) { seen = e.Name ?? ""; signal.Set(); } }; watcher.EnableRaisingEvents = true; File.WriteAllText(Path.Combine(dir, "evt.txt"), "payload"); signal.Wait(TimeSpan.FromSeconds(5)); } Console.WriteLine(seen); // выведет "evt.txt" Directory.Delete(dir, true);

Наблюдайте за каталогом spool, создайте в нем файл job.txt с текстом ready и выведите True, если имя из события совпало с job.txt.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить