我想知道我的文件中有多少行。我怎么能以一种简单的方式做到这一点(我的意思是,不要遍历整个文件并计算每一行)?是否有命令?
答案 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表示'计数'