WriteLine方法

时间:2011-09-05 06:58:36

标签: c# .net

我有一个日志文件(.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

由于

4 个答案:

答案 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)

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

  1. 将小车移回行首 - "Carriage Return"CR
  2. 将纸张向上移动,这样您就可以写一个空行 - "Line Feed"LF
  3. 当然,这在计算机上都不是必需的,但旧习惯会变得很难......

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

    • 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 */ } 
    

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这是Microsoft标准行,以'\ r \ n'结尾。它来自打字机的日子。最初,第一个字符是向下移动一行,第二个字符移动到当前行的开头。因此,综合起来,你会到达下一行的开头。