Streamwriter写入不同的Console.WriteLine()

时间:2016-09-23 07:49:38

标签: c# 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 个答案:

答案 0 :(得分:4)

  

看起来作者只写了每一行的结尾。

这是因为您每次都重新打开文件,覆盖以前的内容。您需要在调用ruby 2.3.0p0之间保持文件处于打开状态,或者以ShowOutput模式打开文件。

文件中的混合内容是因为它只会覆盖文件的开头(不会截断它),所以如果你写的日志条目比前面的条目短,那么前一个文本的结尾仍然存在