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

本文关键字:文本 文件 检测 换行符 一个 一次 读取 字符 | 更新日期: 2023-09-27 18:35:36

目标文件:

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))一次读取一个字符时显然不会检测到与平台无关的换行符.. 我该怎么做?

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

试试这个

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

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

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

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

因此,将字符(可以是'n'r)与'r'n进行比较总是会产生false

相反,正如@jurgen d的回答中提到的,尝试与'n进行比较。

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

你真的需要一次阅读一个字符吗?难道你不喜欢使用StringReader并使用 ReadLine() 吗?

删除的简单方法 '''r

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

使用这个-

if (sC.Equals(''r'))
因为"''

r"在您的情况下位于"'"之前。