2017-07-21 38 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

我很高興您修復了您的答案,但不幸的是,您引用的原始帖子仍然是錯誤的。好吧。我們不能從這裏改變它。 –