После какой-либо помощи или руководства я по возможности.FileSystemWatcher не работает при изменении текстового файла и о том, как добавить строки в панель
Я пытаюсь контролировать текстовый файл в реальном времени и копировать прилагаемый текст в панель в виде окон.
Текстовый файл обновляется через exe-файл, поэтому может быть несколько строк, добавленных в быстрые сеансы, или ничего за несколько минут.
Я попытался FileSystemWatcher, но это не похоже на работу, которую я не могу понять, а также я новичок в этом обработчики событий, и т.д., и все еще учатся в процессе :(
private FileSystemWatcher watcher = new FileSystemWatcher();
public async void StandardOutputHandler(object sender, DataReceivedEventArgs outLine)
{
if (outLine.Data != null && !String.IsNullOrWhiteSpace(outLine.Data)) //checks if line coming from CMD is blank or empty
{
// check if cmd output was redirected into a log file
if (outLine.Data.Contains(">>"))
{
BeginInvoke(new MethodInvoker(() =>
{
//get log path and name
string[] commandLine = outLine.Data.Split('>');
this.logFileFullPath = commandLine[3];
this.logFileFullPath = this.logFileFullPath.Replace('"', ' ').Trim();
string[] split = logFileFullPath.Split('\\');
this.logFileName = split[6];
this.path = split[0] + "\\" + split[1] + "\\" + split[2] + "\\" + split[3] + "\\" + split[4] + "\\" + split[5];
//// Create a new FileSystemWatcher and set its properties.
watcher.Path = this.path + "\\";
watcher.Filter = this.logFileName;
//watch for changes to a a log file
watcher.NotifyFilter = (NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.LastAccess | NotifyFilters.CreationTime);
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
// Begin watching.
watcher.EnableRaisingEvents = true;
}));
}
}
// Define the event handlers.
private void OnChanged(object source, FileSystemEventArgs e)
{
MessageBox.Show("Im here");// not showing
//how to copy appended lines into panel??
}
сообщение коробки в OnChanged метод не подходит. Я вручную изменил файл или удалил его и создал, но событие не запускается.
Я полагаю, это может быть связано с файлом, используемым другим процессом, который в этом случае является exe файл, обновляющий его, когда это необходимо. Кроме того, я думаю, риск состоит в том, что я могу получить только частичный текст, если exe обновляет журнал на в то же время, когда я читал приложенные строки.
Есть ли лучший способ отслеживать обновления текстовых файлов и копировать контент на панель в приложении GUI?
UPDATE: Я переместил код в событие щелчка или начальный метод, и это не имеет никакого значения. окно сообщений не появляется
public BatchRun()
{
InitializeComponent();
watcher.Path = "C:\\Test\\Projects\\99999\\Logs";
watcher.Filter = "*.log";
watcher.NotifyFilter = (NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.LastAccess | NotifyFilters.CreationTime);
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
}
Спасибо за ответ. Это имеет смысл. Тем не менее, я не могу начать мониторинг, когда приложение запускается, потому что у меня не будет всех деталей в то время, когда имя файла и путь, следовательно, причина, по которой он был помещен в этот метод. но позвольте мне попытаться найти способ получить эту информацию ранее. –
W Я обновил свой вопрос с более новой версией кода, и он должен начать прослушивание, как только начнется приложение, но его просто не произойдет. Что мне не хватает? –
Я начинаю верить, что проблемы связаны с тем, что файл журнала используется другим процессом, и поэтому ничего не было спасено, поэтому наблюдатель не видит ничего. Я написал небольшое приложение и скопировал весь код, и он выстрелил, пока не сохранил изменения в файле. –