4

可能重复:
如何快速计算行数?

我有一些文件逐行包含数据。

我想获取文件中的行数以向用户显示进度状态。(我在后台逐行处理这些文件)

我可以通过完全读取文件来做到这一点,但是这些文件太大了,以至于我的应用程序不必要地占用了 RAM 空间。

所以我想在不读取整个文件的情况下获取文件中的行数。

我怎样才能做到这一点?

4

5 回答 5

7
  1. 读取文件的大小(以字节为单位)——操作系统会告诉你这一点。
  2. 阅读前 1000 行(并处理它们)。
  3. 计算平均线大小。
  4. 将此平均大小除以文件大小。
  5. 现在您已经估计了文件中的行数,对于进度条显示之类的东西来说足够准确。
  6. 如果这不够准确,请在阅读文件时不时重新计算。
于 2012-12-17T13:10:23.043 回答
6

显然你不能。获得行数的唯一方法是计算文件中的换行符,您需要为它读取文件。

我可以完全用读取文件来做到这一点。但是这些文件太大了。因此,我的应用程序不必要地消耗 RAM。

您可以部分读取文件(以便每个部分都足够小以容纳内存)并从每个小部分累积行数。

于 2012-12-17T13:07:49.403 回答
5
var lineCount = File.ReadLines(@"C:\file.txt").Count();
于 2012-12-17T13:08:10.527 回答
0

如果不将其读入内存(您不需要一次读取整个文件,您可以逐行读取,例如使用,不会消耗太多内存)。也看看类似的问题ReadLine

long count = 0;
using (StreamReader r = new StreamReader(f))
{
    string line;
    while ((line = r.ReadLine()) != null)
    {
        count++;
    }
}

return count;
于 2012-12-17T13:11:46.340 回答
0

另一种可能性,但这仅适用于您还负责开发生成数据文件的应用程序的情况,即让它创建两个文件。一个包含数据,一个只包含数据文件的行数。然后当您准备好处理数据文件时,您的处理应用程序可以从行数文件中读取行数,然后开始处理数据文件。

如果您无权访问数据生成应用程序,请忽略此答案,因为它不适用于您的问题。

于 2012-12-17T14:09:28.777 回答