2015-01-13 2 views
-3

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

using (var file = new FileStream(FileName, 
             FileMode.Open, 
             FileAccess.Read, 
             FileShare.Read)) 

     using (var sr = new StreamReader(file)) 
     { 
       try 
       { 
        Thread thread = new Thread(delegate() 
        { 
         listBox1.Invoke((MethodInvoker)(() => 
         { 

          listBox1.Items.Clear();//this is the listbox that list every added line and that I clear before of to be filled 
          string[] lines = File.ReadLines(fileName) 
               .Skip(LinecountStartPositionBUFF) 
               .Take(LinecountEndPosition - LinecountStartPositionBUFF) 
               .ToArray(); 
          listBox1.Items.AddRange(lines); 

         })); 
        }); 

        thread.Start(); 

        while (thread.IsAlive) 
         Application.DoEvents(); 
       } 

       catch 
       { } 

      return sr.ReadLine(); 
     } 
+0

Прежде чем продолжить, переименуйте элементы управления. ('listbox1' является ** не ** хорошим соглашением об именах). BTW и не использует пустой блок 'catch {}' – jbutler483

+0

Не связан с вашей проблемой, но проглатывание исключений - это плохая практика. Добавить обработку на вашем блоке catch – apomene

+0

См. [Читать последнюю строку текстового файла] (http://stackoverflow.com/questions/11625595/read-last-line-of-text-file) для правильной реализации. В коде есть много ошибок. – CodeCaster

ответ

2

Вы не можете открыть файл в FileStream, а позже доступ к нему через File.ReadLines, потому что FileStream блокирует файл. Я бы изменил полный код.

+0

Можете ли вы дать мне несколько советов о том, как достичь своей цели, не используя 'File.ReadLines'? спасибо –

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

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