确定文本文件中的行数

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



幕布斯7119047
浏览 459回答 3
3回答

慕森卡

如果您使用的是.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可能更快,但对于大文件来说速度要慢得多; 虽然告诉的唯一方法是使用秒表或代码分析器来测量它。

茅侃侃

如果简单的话,你的意思是一行代码很容易破译但机会效率低下?string[] lines = System.IO.File.RealAllLines($filename);int cnt = lines.Count();这可能是了解多少行的最快捷方式。你也可以这样做(取决于你是否在缓冲它)#for large fileswhile (...reads into buffer){string[] lines = Regex.Split(buffer,System.Enviorment.NewLine);}还有其他许多方法,但上面的一个可能是你将要用的。
打开App,查看更多内容
随时随地看视频慕课网APP