2013-04-24 3 views
0

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

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

private void ReadFile(string path) 
    { 
     using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
     using (StreamReader reader = new StreamReader(file)) 
     { 
      StringBuilder sb = new StringBuilder(); 
      string r = reader.ReadLine(); 

      while (r != null) 
      { 
       sb.Append(r); 
       sb.Append(Environment.NewLine); 
       r = reader.ReadLine(); 
      } 
      textBox.Text = sb.ToString(); 
      reader.Close(); 
     } 
    } 
+1

Как насчет ['File.ReadAllText'] (http://msdn.microsoft.com/en-us/library/system.io.file.readalltext.aspx)? –

+0

@UweKeim Это не сработает, если файл записывается другим процессом. Код OP выглядит нормально. – I4V

+1

Вы можете заменить два вызова «Добавить» вызовом 'sb.AppendLine'. –

ответ

1

Я нашел несколько предложений на вопрос публикуемую here, ваш код уже подтверждает первое предложение, так что я бы попробовать использовать

File.OpenRead(path) 

и посмотреть, работает ли это для вас.

И если это не так, то, по-видимому, программа, которая пишет в файл, просто не позволит вам прочитать ее вообще, если на ней есть дескриптор. Вы можете заметить FileShare.ReadWrite, который сообщает системе, что другие программы могут делать с файлом, программа, которая записывает журнал, может не позволить вам даже прочитать файл вообще.

+0

Я только читаю и просматриваю результаты в текстовом поле. – perkrlsn

+0

@perkrlsn это другая программа, которая пишет ему? –

+0

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

0

Попробуйте это:

using System; 
using System.IO; 

namespace csharp_station.howto 
{ 
    class TextFileReader 
    { 
     static void Main(string[] args) 
     { 
      // create reader & open file 
      Textreader tr = new StreamReader("date.txt"); 

      // read a line of text 
      Console.WriteLine(tr.ReadLine()); 

      // close the stream 
      tr.Close(); 

      // create a writer and open the file 
      TextWriter tw = new StreamWriter("date.txt"); 

      // write a line of text to the file 
      tw.WriteLine(DateTime.Now); 

      // close the stream 
      tw.Close(); 
     } 
    } 
} 

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

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