c# - FileInfo.Length != 所有行长度的总和

标签 c#

我正在尝试为大文件的读取制作一个进度条。 我将进度条的最大值设置为 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/

相关文章:

c# - 具有快照更改检测的 Entity Framework 中的 POCO

c# - 是否可以创建用于将项目添加到 Entity Framework dbset 的通用方法?

c# - ListView 未使用 ObservableCollection 正确更新

c# - 如何在c#中声明类型

c# - 在 Monotouch.Dialog 中设置 DateElement 的样式

c# - native 类是否可以使用 .NET 事件?

c# - 如何在 WPF 文件中只有一个代码隐藏文件的两个 XAML 文件

javascript - AngularJS 中的数组未获取字符串值

c# - 如何将一个非常大的 lucene 结果集连接到一个真正的大型 sql 表 [10 万行]

c# - Xml Serializer 中的注释问题