为了账号安全,请及时绑定邮箱和手机立即绑定

确定文本文件中的行数

确定文本文件中的行数

C#
幕布斯7119047 2019-09-19 16:34:53
有一种简单的方法可以以编程方式确定文本文件中的行数吗?
查看完整描述

3 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

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


查看完整回答
反对 回复 2019-09-19
?
茅侃侃

TA贡献1842条经验 获得超21个赞

如果简单的话,你的意思是一行代码很容易破译但机会效率低下?


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);

}

还有其他许多方法,但上面的一个可能是你将要用的。


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 458 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号