【发布时间】:2019-01-14 21:52:45
【问题描述】:
我正在解析一个大文件,我喜欢通过显示已读取的字节数来监控该过程。 实际代码量很大,但这部分是我计算的。
StreamReader sr = new StreamReader(FilePath);
while ((line = sr.ReadLine()) != null )
{
//do parsing jobs
byteCnt += Convert.ToUInt64( line.Length * sizeof(char) );
}
Console.WriteLine(String.Format("{0:n0}", byteCnt) + " Bytes");
文件为 16.9 GB(18,186,477,492 字节)
但我的程序有 34,816,805,164 字节
怎么会这样?以及如何让这个数字更合理?
谢谢
【问题讨论】:
-
提示:什么是 sizeof(char)?为什么这对于文件可能不正确(不是没有代理对的 UTF-16)?请注意,大约有 2 倍的差异。现在,查看 ReadLine 文档,了解缺失的差异在哪里:“返回的字符串不包含..”
-
会出现细微差别,因为
ReadLine删除了新行和回车字符。所以你每行会丢失两个字符。正如@user2864740 提到的,您可以检查文件的编码。作为替代方案,您可以尝试sr.BaseStream的Position属性。然而,这可能会根据流而抛出。
标签: c# io byte streamreader