【发布时间】:2018-09-25 21:26:52
【问题描述】:
我正在验证来自我们客户的一些文件,这些文件必须满足特定的文件格式。每行有多个固定长度字段,以 511 个字符结束,其中字符 512 和 513 分别为 CR 和 LF。
我已经能够使用子字符串很容易地获取每个字段,但是我遇到了 StreamReader/ReadLine 定位第 512 个和第 513 个字符的问题。尝试使用子字符串定位这些字符时,我收到“System.ArgumentOutofRangeException”错误。
StreamReader file = new StreamReader(textBox2.Text);
while ((line = file.ReadLine()) != null)
{
int lineLength = line.Length;
string crlf = "";
/*
if (lineLength == 511)
{
crlf = line.Substring(511, 2);
}
*/
}
我已经注释掉了给出错误的部分。我有哪些选择来确认每行的结尾是 CRLF?
【问题讨论】:
-
What are my options to confirm the end of each line is CRLF?不要使用ReadLine。使用ReadBlock或ReadToEnd。 -
ReadLine将返回没有换行符的行。 -
为什么需要确认CR/LF?方法名称是
ReadLine()。 Nomen est omen。如果不读一行,您认为ReadLine()会做什么?行尾标有 CR/LF、LF 或“流结束”,还是您不同意?注意,我说它们是标记;它们不是文本行的一部分(文本行也可以像 EOF/EOS 一样结束),它们只是标记行的结尾。您真正想在这里实现什么目标? -
@elgonzo 我知道 ReadLine() 会一直读取到行尾。文件格式要求规定每行的结尾需要是 CRLF。如果有人只使用 LF,那么我们就会遇到错误。
-
@Cody:是否允许使用多字节字符?例如,文件可以使用 UTF-8 编码,还是只需要 ASCII 字符?每行 513 个字节和每行 513 个字符之间存在差异。
标签: c# streamreader readline