在一次读取一个字符的文本文件时检测换行符

时间:2012-05-28 14:06:16

标签: c#

目标文件:

Hello
World

代码:

if (file != null)
{
    //Read file one character at a time
    StreamReader reader;
    reader = new StreamReader(file);
    do
    {
        int s = reader.Read();
        char sC = (char)s;
        if (sC.Equals(Environment.NewLine))
        {
            Console.WriteLine("+1");
        }
        Console.WriteLine((char)s);
    } while (!reader.EndOfStream);
    reader.Close();
    reader.Dispose();
}

输出:

H
e
l
l
o




W
o
r
l
d

所以(sC.Equals(Environment.NewLine))显然在一次读取一个字符时没有检测到独立于平台的换行符。我该怎么做?

5 个答案:

答案 0 :(得分:6)

试试这个

if (sC.Equals('\n'))

如果您确定在\r之后总会有\n,那么您可以通过另一个reader.Read();电话吞下它。例如:

if (sC.Equals('\n')) {
   reader.Read()
   Console.WriteLine("+1");
}

答案 1 :(得分:2)

那是因为Environment.NewLine是由String组成的\r\n(取决于您的环境,在Windows平台上它是\r\n) - 这是Carrige Return和New Line字符 - 这是一对通常定义新行

因此,将字符(可以是\n\r)与\r\n进行比较将始终产生false

相反,如@jurgen的回答中所述,请尝试与\n进行比较。

答案 2 :(得分:0)

Environment.NewLine实际上是两个字符:\ r \ n

你真的需要一次阅读一个字符吗?您不想使用StringReader并使用ReadLine()吗?

答案 3 :(得分:0)

轻松删除\ n \ r

        String text = "test\n\r";
        if (text[text.Length - 1] == 10 && text[text.Length - 2] == 13)
            text= text.Substring(0, text.Length - 2);

答案 4 :(得分:0)

使用此-

if (sC.Equals('\r'))

在您的情况下,由于'\ r'之前是'\ n'。