在C#中计算文件行

时间:2010-01-20 16:25:57

标签: c# count lines

我想知道我的文件中有多少行。我怎么能以一种简单的方式做到这一点(我的意思是,不要遍历整个文件并计算每一行)?是否有命令?

4 个答案:

答案 0 :(得分:9)

好:

int lines = File.ReadAllLines(path).Length;

非常简单,但对于大型文本文件效率不高。在大多数情况下,我可能会使用TextReader来避免过度缓冲:

int lines = 0;
using (TextReader reader = File.OpenText(path)) {
    while (reader.ReadLine() != null) { lines++; }
}

答案 1 :(得分:4)

你调用的任何“函数”基本上都会做同样的事情 - 逐行进行并计算新行字符的数量。

如果你想让自己陷入使某些东西看起来更“清脆”的正则表达式来计算新行字符的数量就可以了。

答案 2 :(得分:0)

某种方式(正则表达式,FileStream等)某些东西,某处必须经过换行符。

答案 3 :(得分:0)

取决于行的长度...通常最快的方法是使用这个简单的公式来做 - 以字节为单位获取文件的长度并除以行的长度,例如:

const int LINE_LENGTH = 80;
System.IO.FileInfo f = new System.IO.FileInfo(path);
int noLines = f.Length / LINE_LENGTH;

以上假设该行的长度为80个字符宽...

如果长度是可变的,除了打开文件并遍历每一行并跟踪行数之外,没有其他方法可以做到这一点。

修改 我在下面发表评论后才意识到更简单的方法.. 在System.Diagnostics.Process命名空间下实际使用Shell来调用grep -c "$(\r?\n?|\n)"使用参数作为相关文件的路径会不会更容易 - 这会使它更灵活并且可以满足任何文件。你要做的唯一事情是读取输出和正则表达式来获得实际的行数,例如,使用我的grep随Borland C一起提供,我得到这个输出

C:\Documents and Settings\Tom>grep -c "$(\r?\n?)" 273.txt
File 273.txt:
35 lines match

输出和里程可能会有所不同,-c命令切换到grep表示'计数'