如何在不读取的情况下获取文件中的行数

时间:2012-12-17 13:06:13

标签: c#

  

可能重复:
  How to count lines fast?

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

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

我可以通过完全读取文件来完成此操作,但这些文件非常大 我的应用程序不必要地消耗RAM空间。

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

我该怎么做?

5 个答案:

答案 0 :(得分:7)

  1. 读取文件的大小(以字节为单位) - o / s会告诉你这个。
  2. 阅读前1000行(并处理它们)。
  3. 计算平均线宽。
  4. 将此平均大小除以文件大小。
  5. 现在你估计了文件中的行数,对于进度条显示有点准确。
  6. 如果这不够准确,请在阅读文件时不时重新计算。

答案 1 :(得分:6)

显然你不能。获取行数的唯一方法是计算文件中的新行字符,然后需要为其读取文件。

  

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

您可以部分读取文件(这样每个部分都足够小以适应内存)并累积每个小部分的行数。

答案 2 :(得分:2)

var lineCount = File.ReadLines(@"C:\file.txt").Count();

答案 3 :(得分:0)

无法计算文本文件行(完全,但你可以根据第一个 n 行进行猜测)没有读取它进入内存(你不需要一次读取整个文件,你可以逐行读取,例如使用ReadLine,不会消耗太多的RAM)。另请查看similar question

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

return count;

答案 4 :(得分:0)

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

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