WriteLine方法

我有一个日志文件(.txt),其中包含以下信息:

Filename1 - A3332NCDER Filename2 - B3332NCDER Filename3 - B1222NCDERE Filename4 - C1222NCDER Filename4 - C1222NCDERE 

每行包含文件名和相应的ID。 现在我选择ID并将其分配给List。

 char[] delimiters = new char[]{'\n','\r','-'}; IList fileIDs = File.ReadAllText(logFileName) .Split(delimiters, StringSplitOptions.RemoveEmptyEntries) .Where((lineItem, index) => index % 2 == 1) .Select(lineItem => lineItem.Trim()) .ToList(); 

我写的日志文件如下:

 using (StreamWriter logFile = new StreamWriter(logFileName, true)) { logFile.WriteLine(fileName + " - " + fileID); } 

这很好。我很想知道为什么WriteLine方法会同时添加\n\r

谢谢

这是我们使用类型作家时的历史包袱。 要结束当前行并开始新行,您必须做两件事:

  1. 将托架移回到线的起点 – "Carriage Return"或简称CR
  2. 将纸张向上移动,以便在上面写上空行 – "Line Feed""Line Feed"或简称LF

当然,这在计算机上都不是必需的,但是老习惯很难…

不同的操作系统使用不同的行结束字符(或它们的序列),但对于大系统:

  • Windows:CR + LF
  • Unix / Linux / OS X:LF
  • 旧Mac(v9及更早版本):CR

有关更多信息和更大的操作系统特定行结尾列表,请参阅有关Newline的 wikipedias文章。

在.NET中,有一个名为Environment.Newline的静态属性,它包含基于运行应用程序的系统的相应行结束字符串。


关于你的代码,你可以简化一下,只需调用File.ReadAllLines() ,你就会得到一个包含所有行的数组。 那样你就不必费心去String.Split等了。

或者,如果您对.NET 4依赖项没问题,请使用File.ReadLines ,它将一次延迟读取一行,因此您不必将整个文件存储在内存中。 或者第三,你可以做旧但忠实的ReadLine方法:

 string line; while ((line = myFile.ReadLine()) != null) { /* do stuff to line here */ } 

默认行终止符是一个字符串,其值为回车符,后跟换行符(C#中为“\ r \ n”,Visual Basic中为vbCrLf)。

http://msdn.microsoft.com/en-us/library/zdf6yhx5.aspx

可以通过设置Console.Out.NewLine来更改终结符,例如: Console.Out.NewLine = "\r\n\r\n";

这就是WriteLine的原因。 如果您不想要标准行终止符\ n \ r \ n则使用Write

它是Microsoft标准行,以’\ r \ n’结尾。 它来自打字机的时代。 最初,第一个字符是向下移动一行,第二个字符移动到当前行的开头。 因此,综合起来,您将到达下一行的开头。