2017-01-24 6 views
0

После какой-либо помощи или руководства я по возможности.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; 
    } 

ответ

0

кажется, что вы начинаете только смотреть файл в вызове StandardOutputHandler.

Если этот метод вызывается только после записи в файл, наблюдатель не заметит никаких изменений в файле.

Возможно, вы захотите, чтобы весь код в вашем действии MethodInvoker был вызван, когда приложение запускается (или, по крайней мере, когда ему нужно контролировать файл).

Затем в вашем методе OnChanged вам может потребоваться вызвать в потоке пользовательского интерфейса.

+0

Спасибо за ответ. Это имеет смысл. Тем не менее, я не могу начать мониторинг, когда приложение запускается, потому что у меня не будет всех деталей в то время, когда имя файла и путь, следовательно, причина, по которой он был помещен в этот метод. но позвольте мне попытаться найти способ получить эту информацию ранее. –

+0

W Я обновил свой вопрос с более новой версией кода, и он должен начать прослушивание, как только начнется приложение, но его просто не произойдет. Что мне не хватает? –

+0

Я начинаю верить, что проблемы связаны с тем, что файл журнала используется другим процессом, и поэтому ничего не было спасено, поэтому наблюдатель не видит ничего. Я написал небольшое приложение и скопировал весь код, и он выстрелил, пока не сохранил изменения в файле. –

 Смежные вопросы

  • Нет связанных вопросов^_^