确定文本文件中的行数

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

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

File类有一个新的ReadLines方法,它懒惰地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++; } } 

编辑:回答关于效率的问题

我说的第二个更有效的原因是关于内存使用,不一定是速度。 第一个将文件的全部内容加载到数组中,这意味着它必须至less分配与文件大小相同的内存。 第二个只是一次循环一行,所以不需要一次分配多于一行的内存。 这对于小文件并不重要,但对于较大的文件来说,这可能是一个问题(如果您尝试在32位系统上find4GB文件中的行数,例如,那里根本没有足够的用户模式地址空间来分配一个这样大的数组)。

在速度方面,我不会指望它有很多。 ReadAllLines可能有一些内部的优化,但另一方面它可能不得不分配大量的内存。 我猜测ReadAllLines对于小文件可能会更快,但是对于大文件来说要慢得多。 尽pipe要告诉的唯一方法是用秒表或代码分析器来测量它。

最简单的:

 int lines = File.ReadAllLines("myfile").Length; 

这将使用更less的内存,但可能需要更长的时间

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

这可能是知道多less行的最快方法。

你也可以做(取决于是否缓冲)

 #for large files while (...reads into buffer){ string[] lines = Regex.Split(buffer,System.Enviorment.NewLine); } 

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

您可以快速读入,并增加一个计数器,只需使用一个循环来递增,对文本无所作为。

计算回车/换行。 我相信在unicode他们仍然分别是0x000D和0x000A。 这样你就可以像你想的那样高效或低效,并决定你是否要处理这两个angular色

 try { string path = args[0]; FileStream fh = new FileStream(path, FileMode.Open, FileAccess.Read); int i; string s = ""; while ((i = fh.ReadByte()) != -1) s = s + (char)i; //its for reading number of paragraphs int count = 0; for (int j = 0; j < s.Length - 1; j++) { if (s.Substring(j, 1) == "\n") count++; } Console.WriteLine("The total searches were :" + count); fh.Close(); } catch(Exception ex) { Console.WriteLine(ex.Message); } 

一个可行的选项,以及我个人使用的选项是将自己的标题添加到文件的第一行。 我为我的游戏做了一个自定义模型格式。 基本上,我有一个工具,优化我的.obj文件,摆脱我不需要的废话,将它们转换为更好的布局,然后写入线,面,法线,顶点和纹理紫外线的总数第一行。 这些数据在加载模型时会被各种arrays缓冲区使用。

这也是有用的,因为您只需要循环一次文件来加载它,而不是一次计算行数,再次将数据读入您创build的缓冲区。

您可以启动“ wc .exe”可执行文件(附带UnixUtils ,不需要安装)作为外部进程运行。 它支持不同的行数方法(如unix与mac和windows)。