小编典典

确定文本文件中的行数

c#

有没有一种简单的方法可以以编程方式确定文本文件中的行数?


阅读 385

收藏
2020-05-19

共1个答案

小编典典

严重迟来的编辑:如果您使用的是.NET 4.0或更高版本

File类有一个新的ReadLines,其懒惰地列举线而不是贪婪地读取它们全部纳入等的阵列的方法ReadAllLines。因此,您现在可以同时拥有效率和简洁性:

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

原始答案

如果您不太担心效率,可以简单地写:

var lineCount = File.ReadAllLines(@"C:\file.txt").Length;

对于更有效的方法,您可以执行以下操作:

var lineCount = 0;
using (var reader = File.OpenText(@"C:\file.txt"))
{
    while (reader.ReadLine() != null)
    {
        lineCount++;
    }
}

编辑:回应有关效率的问题

我说第二个效率更高的原因是关于内存使用情况,不一定是速度。第一个将文件的全部内容加载到一个数组中,这意味着它必须至少分配与文件大小一样多的内存。第二个仅一次循环一行,因此它不必一次分配多于一行的内存。对于小文件来说,这并不是很重要,但是对于大文件来说,这可能是个问题(例如,如果您尝试在32位系统上找到4GB文件中的行数,那么根本不够用)用户模式地址空间来分配这么大的数组)。

就速度而言,我不希望其中有很多。ReadAllLines可能在内部进行了一些优化,但另一方面,它可能不得不分配大量的内存。我猜想对于小文件,ReadAllLines可能会更快,但是对于大文件,ReadAllLines可能会慢得多。尽管唯一的方法是使用秒表或代码分析器对其进行测量。

2020-05-19