Печать последней добавленной строки в файл журнала
У меня есть лог-файл, который я должен отслеживать в режиме реального времени с помощью signalr. Я использую метод сопоставления с удаленным методом и подход FileSystemEventHandler следующим образом : это метод, который наблюдает за файлом журнала.
public void Progress_Log(SchemaUpdate imp) { // Preparing remote mapping string strCmdText; strCmdText = "/C net use /delete k: /y"; System.Diagnostics.Process.Start("CMD.exe", strCmdText); Thread.Sleep(500); strCmdText = @"/C net use K: \\xx\e$\test\dumps\Create /user:xx xxxx"; System.Diagnostics.Process.Start("CMD.exe", strCmdText); var watch = new FileSystemWatcher { Path = @"\\TN1ORC21\e$\test\dumps\Create", Filter = "output.txt" }; //watch.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite; //more options watch.Changed += new FileSystemEventHandler(OnChanged); watch.EnableRaisingEvents = true; }
Как только в файл добавляется новая строка вызывается метод onChanged :
public void OnChanged(object source, FileSystemEventArgs e) { using StreamReader r = new StreamReader(System.IO.File.Open(@"k:\" + e.Name, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)); string line; while (!r.EndOfStream) { line = r.ReadLine(); if (r.Peek() == -1) { HubContext.Clients.All.SendAsync("ReceiveMessage", "Log", line); // THIS BASICALLY SENDS THE LINE TO THE HUB THEN TO THE CLIENT (BROWSER) } } }
Что я уже пробовал:
Проблема в том, что он не печатает все новые добавленные строки и пропускает много строк, которые мне нужно увидеть, и, например, для файла из 200 строк я получу максимум 7 строк. Я понял, что моя проблема заключается в цикле while метода onChanged, но я не могу понять, как это исправить.