有没有一种简单的方法可以以编程方式确定文本文件中的行数?
严重迟来的编辑:如果您使用的是.NET 4.0或更高版本
的File类有一个新的ReadLines,其懒惰地列举线而不是贪婪地读取它们全部纳入等的阵列的方法ReadAllLines。因此,您现在可以同时拥有效率和简洁性:
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可能会慢得多。尽管唯一的方法是使用秒表或代码分析器对其进行测量。