【发布时间】:2017-05-29 16:12:34
【问题描述】:
我必须处理一个文本文件并检查它是否以回车符结尾。
我必须阅读全部内容,进行一些更改并将其重新写入目标文件,并保持与原始文件完全相同的格式。这就是问题所在:我不知道原始文件最后是否包含换行符。
我已经试过了:
- StreamReader.ReadLine() 方法,但返回的字符串不包含终止回车和/或换行。
- ReadToEnd() 方法也是一种解决方案,但我想知道在文件非常大的情况下的性能。解决方案必须有效。
- 获取最后 2 个字符并检查它们是否等于 "\r\n" 可能会解决此问题,但我必须处理大量编码,而且实际上似乎无法获取它们。
如何有效地读取文件的所有文本并确定它是否以换行符结尾?
【问题讨论】:
-
如果你无论如何都必须阅读整个内容,你为什么担心使用 ReadToEnd() ?
-
@PhillipH 因为 ReadToEnd() 返回文件的全部内容。
-
@CodeCaster,这行不通。根据编码,这些字符的含义可能完全不同。
-
@CodeCaster 例如,UCS-2 文件或 UTF-16 文件将以
00 0D 00 0A之类的内容结尾,具体取决于字节序。每个字符(包括 ASCII)的长度为 16(或 32)位。 -
@CodeCaster 但是如果你不知道编码,你将不知道十六进制序列
000D 000A是四个字符("\0\r\0\n"),两个字符("\r\n"),还是别的什么.如果你想一次读取一个字符,你必须关心编码(无论一个字符总是 8 位,总是 16 位,可以变化 8/16/24 等位,还是别的什么)。
标签: c# encoding text-files newline streamreader