我正在尝试为大文件的读取制作一个进度条。
我将进度条的最大值设置为 FileInfo.Length
,我使用 StreamReader.ReadLine
读取每一行并计算每行长度的总和(使用 String.Length
) 来设置进度条的当前值。
我注意到文件的总长度与每行长度的总和之间存在差异。例如 :
FileInfo.Length
= 25577646
所有行长度的总和 = 25510563
为什么会有这样的差异?
感谢您的帮助!
最佳答案
您没有添加行尾。它可能是 1 到 4 个字节,具体取决于编码或者它是 \n
还是 \r
还是 \r\n
(1 byte = UTF8 + \n
, 4 bytes = UTF16 + \r\n
)
请注意,使用 ReadLine
无法检查行尾(\n
或 \r
或 \r\n
遇到了)
来自 ReadLine :
A line is defined as a sequence of characters followed by a line feed ("\n"), a carriage return ("\r"), or a carriage return immediately followed by a line feed ("\r\n")
其他问题:如果您的文件是 UTF8,则 C# 字符长度与字节长度不同:è
在 C#(使用 UTF16)中是一个字符,在 UTF8 中是 2 个字符。你可以:
int len = Encoding.UTF8.GetByteCount(line);
关于c# - FileInfo.Length != 所有行长度的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29622577/