2017-07-21 40 views
0

从C/C++的背景编辑,我不希望看到在使用差异的WriteLine的输出VS写

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

+1

为什么你不期望有什么区别?如果你在Windows上,那么'\ n'不足以引入新行。 – mason

+0

欢迎来到C#的世界,一切都为你完成,如果你需要的话,还有一个快捷方式 –

+0

如果你有一种情况需要手动插入换行符,那么'Environment.NewLine'可能是一个比指定你的退出更好的选择字符。 –

回答

1

MSDN说:

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

望着GitHub的源TextWriter,可以看出

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

其中CoreNewLine是

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

考虑的.Net第一次开始在Windows中,其中新线\ r \ ñ,这并不奇怪。

看一下Mono的实现会很有趣。

+1

GitHub的源代码?为什么不'referencesource.microsoft.com'? –

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

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

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

所以,这将是:

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

FWIW,您引用的信息不正确。 '\ n'是换行LF)。 '\ r'是回车符(CR)。请参阅http://www.asciitable.com/。 –

+0

@RSahu固定,请参阅编辑 –

+0

我很高兴您修复了您的答案,但不幸的是,您引用的原始帖子仍然是错误的。好吧。我们不能从这里改变它。 –