我有一个日志文件(.txt),其中包含以下信息:
Filename1 - A3332NCDER
Filename2 - B3332NCDER
Filename3 - B1222NCDERE
Filename4 - C1222NCDER
Filename4 - C1222NCDERE
每行包含文件名和相应的ID。现在我选择ID并将其分配给列表。
char[] delimiters = new char[]{'\n','\r','-'};
IList<string> 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
。
由于
答案 0 :(得分:3)
默认行终止符是一个字符串,其值为一个回车符 返回后跟换行符(C#中的“\ r \ n”,或Visual中的vbCrLf) 碱性)。
http://msdn.microsoft.com/en-us/library/zdf6yhx5.aspx
可以通过设置Console.Out.NewLine
来更改终结符,例如:Console.Out.NewLine = "\r\n\r\n";
答案 1 :(得分:3)
这是我们使用类型作家时的历史包袱。要结束当前行并开始新行,您必须做两件事:
"Carriage Return"
或CR
"Line Feed"
或LF
当然,这在计算机上都不是必需的,但旧习惯会变得很难......
不同的操作系统使用不同的行结束字符(或它们的序列),但对于大系统:
有关更多信息和更大的操作系统特定行结尾列表,请参阅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 */ }
答案 2 :(得分:0)
这就是WriteLine的原因。如果您不想要标准行终止符\ n \ r \ n则使用Write
答案 3 :(得分:0)
这是Microsoft标准行,以'\ r \ n'结尾。它来自打字机的日子。最初,第一个字符是向下移动一行,第二个字符移动到当前行的开头。因此,综合起来,你会到达下一行的开头。