有一种简单的方法可以以编程方式确定文本文件中的行数吗?
严重迟来的编辑:如果您使用的是.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可能更快,但对于大文件来说速度要慢得多; 虽然告诉的唯一方法是使用秒表或代码分析器来测量它.
最简单的:
int lines = File.ReadAllLines("myfile").Length;
这将使用更少的内存,但可能需要更长的时间
int count = 0; string line; TextReader reader = new StreamReader("file.txt"); while ((line = reader.ReadLine()) != null) { count++; } reader.Close();
如果简单的话,你的意思是一行代码很容易破译但机会效率低下?
string[] lines = System.IO.File.RealAllLines($filename); int cnt = lines.Count();
这可能是了解多少行的最快捷方式.
你也可以这样做(取决于你是否在缓冲它)
#for large files while (...reads into buffer){ string[] lines = Regex.Split(buffer,System.Enviorment.NewLine); }
还有其他许多方法,但上面的一个可能是你将要用的.