有没有一种方法可以获取大文本文件中的行数,但不需要读取文件内容或读取到文件结尾并进行计数++。
也许有一些文件属性,但根本找不到它。 因为在某些情况下,我可能需要获取总行数并将其与当前行进行比较,以显示百分比,仅仅为了显示百分比就先读取所有内容,然后再读取一遍以显示原始文本对用户来说可能是愚蠢的。
最好的
有没有一种方法可以获取大文本文件中的行数,但不需要读取文件内容或读取到文件结尾并进行计数++。
也许有一些文件属性,但根本找不到它。 因为在某些情况下,我可能需要获取总行数并将其与当前行进行比较,以显示百分比,仅仅为了显示百分比就先读取所有内容,然后再读取一遍以显示原始文本对用户来说可能是愚蠢的。
最好的
不行,你必须读取文件。如果你想快速找到它而不用计算,可以考虑将其存储在文件的开头或另一个文件中。
请注意,你可以流式传输文件,速度非常快:
int count = File.ReadLines(path).Count();
因为有些情况下我需要获取总行数并将其与当前行进行比较,以显示百分比。但仅为了显示百分比,先读取所有内容再重新读取以显示原始文本可能是不太明智的。File.ReadLines
方法不会一次性读取整个文件,因此它不会占用太多内存。但是该方法仅适用于 Framework 4 或更高版本。 - GuffaFile.ReadLines
返回一个 IEnumerable<string>
- 它不会一次性将整个文件读入内存。 - John Saundersint count = 0; using(var e = source.GetEnumerator()) { while(e.MoveNext()) { count++; } } return count;
而 var = source.GetEnumerator()
和 e.MoveNext()
基本上打开文件作为 StreamReader
,然后重复执行 StreamReader.ReadLine
。没有对文件进行缓冲。 - jason不,没有其他方法。
文件不是基于行的(甚至不是基于字符的),因此没有关于行数(或字符数)的元信息。有关内容的唯一元数据是以字节为单位的长度。
如果您对文件有一些额外的信息,例如每行都是完全相同的长度,并且使用8位编码,使得字符数与字节数相同,那么您可以从文件大小计算出行数。
\r\n
和\n
。 - D'Arcy Rittich