如何计算TexTreader.Readline()读取的字节数?
-
23-10-2019 - |
题
我正在解析一个非常大的记录文件(每行,每行的长度都有不同),我想跟踪我在文件中阅读的字节数,以便在发生的情况下恢复失败。
我写了以下内容:
using (TextReader myTextReader = CreateTextReader())
{
string record = myTextReader.ReadLine();
bytesRead += record.Length;
ParseRecord(record);
}
但是,这是不起作用的 ReadLine()
剥离行中的任何CR/LF字符。此外,可以通过CR,LF或CRLF字符终止行,这意味着我不能仅将1添加到 bytesRead
.
有没有简单的方法来获得实际的线长度,还是我自己写的 ReadLine()
用颗粒状的方法 Read()
操作?
解决方案
获得基础流的当前位置无济于事,因为StreamReader会从流中读取数据。
从本质上讲,如果不编写自己的流程阅读器,就无法做到这一点。但是你真的需要吗?
我只需计算读取的行数。
当然,这意味着要定位到特定的线路,您需要读取n行而不是只是寻求偏移,但是这是怎么回事?您是否确定性能是不可接受的?
其他提示
Textreader读取字符串,这是字符,[根据编码]的字符不等于字节。
如何存储读取的线路数,然后在恢复时跳过很多行?我想这全都是关于不处理这些行,不一定避免从流中读取它们。
想一想,我可以使用 StreamReader
并如下获取基础流的当前位置。
using (StreamReader myTextReader = CreateStreamReader())
{
stringRecord = myTextReader.ReadLine();
bytesRead += myTextReader.BaseStream.Position;
ParseRecord(record);
// ...
}
不隶属于 StackOverflow