WriteLine与Write的输出差异

时间:2017-07-21 17:10:40

标签: c#

来自C / C ++的背景,我不希望看到使用输出的任何差异

file.WriteLine("FINISH");

vs使用

file.Write("FINISH\n");

第一行的输出与

的输出相匹配
file.WriteLine("FINISH\r\n");

这是预期的吗?

这是一个完整的测试计划。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StreamTest
{
   class Program
   {
      static void Main(string[] args)
      {
         var file = new System.IO.StreamWriter("D:/temp/test.out", false);
         file.WriteLine("FINISH");
         file.Write("FINISH\n");
         file.Write("FINISH\r\n");
         file.Close();
      }
   }
}

当我使用gvim时,输出的差异是可见的。这是在gvim中查看文件的图像。

enter image description here

2 个答案:

答案 0 :(得分:1)

\n = LF (Line Feed) // Used as a new line character in Unix
\r = CR (Carriage Return) // Used as a new line character in Mac OS
\n\r = CR + LF // Used as a new line character in Windows

Console.WriteLine使用\r\nWrite您只使用\n

另外,考虑到这一点,如果您打算使用此跨平台:

  

默认行终止符是一个字符串,其值为一个回车符   返回后跟换行符(C#中的“\ r \ n”,或Visual中的vbCrLf)   基本)。您可以通过设置更改行终止符   Out属性的TextWriter.NewLine属性为另一个字符串。

所以,这将是:

System.Console.Out.NewLine = "\r";

答案 1 :(得分:1)

MSDN说:

  

您可以通过将Out属性的TextWriter.NewLine属性设置为另一个字符串来更改行终止符。该示例提供了一个说明。

查看TextWriter的github源代码,可以看到

public virtual String NewLine {
    get { return new String(CoreNewLine); }

其中CoreNewLine是

protected char[] CoreNewLine = new char[] { '\r', '\n' };

考虑到.Net首先在Windows中开始,新行是\ r \ n,这并不奇怪。

看一下Mono实现会很有趣。