在C中计数文件行#
好:
int lines = File.ReadAllLines(path).Length;
是相当简单的,但对于庞大的文本文件不是很有效。我可能会在大多数情况下使用TextReader
,以避免过多的缓冲:
int lines = 0;
using (TextReader reader = File.OpenText(path)) {
while (reader.ReadLine() != null) { lines++; }
}
坦克!!!! 顺便说一句,我用这个为65500行的文件,所以我认为它甚至错误的文件... – aharon 2010-01-20 16:42:36
任何“功能”你打电话是要基本上做同样的事情 - 通过走行线和计数新行的数量字符。
如果你想让自己陷入让更多的东西看起来更“脆”的情况,那么用一个正则表达式来计算新行字符的数量就可以实现。
一旦你已经读完整个文件 - 如果它很大,不是真的可行。或者你每行都这样做......哦,等等......-) – 2010-01-20 16:29:33
我们应该告诉OP,它仍然会读取整个文件吗? ;) 我想,如果元数据附加到追踪行数的文件(它可能只适用于文本文件),那么你可以阅读它。但我不认为存在这样的事情。 – FrustratedWithFormsDesigner 2010-01-20 16:34:08
这样或那样的(正则表达式,FileStream等)的东西,某处将不得不通过换行符。
取决于线路的长度...通常最快的方法就是做这个用这个简单的公式 - 获得以字节为单位的文件长度和线的长度划分,例如:
const int LINE_LENGTH = 80; System.IO.FileInfo f = new System.IO.FileInfo(path); int noLines = f.Length/LINE_LENGTH;
上面假定线的长度是恒定的80个字符宽...
如果长度是可变的,存在从通过每个线打开该文件并重复这样做,除了没有其它方式并跟踪行数。
编辑: 我才意识到一个更简单的方法后,我贴在下面留言.. 这岂不是更容易实际使用的外壳下System.Diagnostics.Process
命名空间使用的参数作为文件路径来调用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意味着'计数'
遍布整个文件?我们正在谈论3行代码来计算这一点。 – 2010-01-20 16:29:31