2

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

4

4 回答 4

9

好:

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

相当简单,但对于大型文本文件不是很有效。在大多数情况下,我可能会使用 aTextReader来避免过度缓冲:

int lines = 0;
using (TextReader reader = File.OpenText(path)) {
    while (reader.ReadLine() != null) { lines++; }
}
于 2010-01-20T16:27:22.387 回答
4

你调用的任何“函数”基本上都会做同样的事情——一行一行地计算换行符的数量。

如果你想欺骗自己让某些东西看起来更“清晰”,那么一个正则表达式来计算换行符的数量就可以了。

于 2010-01-20T16:28:21.547 回答
0

一种或另一种方式(Regex,FileStream 等),某处必须通过换行符。

于 2010-01-20T16:31:27.183 回答
0

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

常量 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)"- 这将使其更加灵活和可以满足任何文件。您唯一需要做的就是在输出中读取并对其进行正则表达式以获得实际的行数,例如,使用我的 Borland C 附带的 grep,我得到了这个输出

C:\Documents and Settings\Tom>grep -c "$(\r?\n?)" 273.txt
文件 273.txt:
35行匹配

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

于 2010-01-20T16:34:33.197 回答