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
。
谢谢
这是我们使用类型作家时的历史包袱。 要结束当前行并开始新行,您必须做两件事:
- 将托架移回到线的起点 –
"Carriage Return"
或简称CR
- 将纸张向上移动,以便在上面写上空行 –
"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’结尾。 它来自打字机的时代。 最初,第一个字符是向下移动一行,第二个字符移动到当前行的开头。 因此,综合起来,您将到达下一行的开头。