2016-09-23 4 views
1

У меня есть потоковик, который записывает данные из потока процессов в файл журнала. Когда я показываю выход с Console.WriteLine() Результат выглядит следующим образом:Streamwriter пишет разные, чем Console.WriteLine()

SW DATA = Sep 23, 2016 9:40:37 AM hudson.remoting.jnlp.Main$CuiListener status 
SW DATA = INFO: Trying protocol: JNLP3-connect 
SW DATA = Sep 23, 2016 9:40:38 AM hudson.remoting.jnlp.Main$CuiListener status 
SW DATA = INFO: Server didn't accept the handshake: Unknown protocol:Protocol:JNLP3-connect 
SW DATA = Sep 23, 2016 9:40:38 AM hudson.remoting.jnlp.Main$CuiListener status 
SW DATA = INFO: Connecting to Machine:51136 
SW DATA = Sep 23, 2016 9:40:38 AM hudson.remoting.jnlp.Main$CuiListener status 
SW DATA = INFO: Trying protocol: JNLP2-connect 
SW DATA = Sep 23, 2016 9:40:38 AM hudson.remoting.jnlp.Main$CuiListener status 
SW DATA = INFO: Connected 

Но когда я открываю Textfile, это выглядит следующим образом:

INFO: Connected 
:38 AM hudson.remoting.jnlp.Main$CuiListener status 
LP3-connect 
6231dd with ID 
ad is recommended. 

Мой код:

static void ShowOutput(string data) 
    { 
     if (data != null) 
     { 
      FileStream fileStream = new FileStream(@"c:\temp\LogFile.txt", FileMode.OpenOrCreate, FileAccess.Write); 
      Console.WriteLine("SW DATA = " + data); 
      using (StreamWriter w = new StreamWriter(fileStream)) 
      { 
       w.WriteLine(data); 
       w.Flush(); 
      } 
      fileStream.Close(); 
     } 
    } 

Это выглядит как писатель пишет только конец каждой Линии.

Данные поступают из процесса консоли, подобный следующему:

http://www.codeproject.com/Articles/4665/Launching-a-process-and-displaying-its-standard-ou

Мой вопрос:

Как я могу предотвратить это?

+1

Почему бы не '' 'File.AppendAllText'''? – tym32167

ответ

4

Похоже, что писатель пишет только конец каждой Линии.

Это потому, что вы повторно открываете файл каждый раз, перезаписывая предыдущий контент. Вам либо нужно держать файл открытым между вызовами до ShowOutput, либо открыть его в режиме Append.

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

+0

Хорошо, но почему это происходит? Я знаю, что этот способ медленный и не оптимальный, но он должен работать ... –

+1

Потому что, когда вы снова открываете файл, позиция, в которую будет записываться поток, находится в позиции 0, каждый раз. Каждая строка, которую вы пишете в файл, записывается с начала файла. Вы по существу перезаписываете начало предыдущей строки, и если новая строка короче, вы оставляете биты и кусочки предыдущей строки свисающими. Если вы хотите добавить новую строку в конце, вам нужно сказать .NET, чтобы открыть файл для добавления. –

+0

ОК, теперь я вижу, что автор открывает файл для записи, а не добавляет ... Спасибо за разъяснение. –

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