来自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中查看文件的图像。
答案 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\n
而Write
您只使用\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实现会很有趣。