在C#中读取第一百万行
本文关键字:第一百万 读取 | 更新日期: 2023-09-27 17:54:28
我有一个很长的文本文件。所有行的长度都相同。我想在C#中读取第一百万行,而不首先读取之前的999999行,因为否则程序会变得太慢。我该怎么办?
试试这个
const int BYTES_PER_LINE = 120;
static void Main(string[] args)
{
StreamReader reader = new StreamReader("FileName", Encoding.UTF8);
long skipLines = 999999;
reader.BaseStream.Position = skipLines * BYTES_PER_LINE;
}
您知道每行中字节数吗?
注意知道字符数是不够的。
如果你知道它是一个固定数量的字节使用:
using( Stream stream = File.Open(fileName, FileMode.Open) )
{
stream.Seek(bytesPerLine * (myLine - 1), SeekOrigin.Begin);
using( StreamReader reader = new StreamReader(stream) )
{
string line = reader.ReadLine();
}
}
如果没有,则:
string line = File.ReadLines(FileName).Skip(999999).Take(1).First();
虽然第二个选项仍然需要枚举行,但它避免了一次将整个文件读入内存
当然,如果你说的第一百万行是指文件的末尾,那么另一种方法是有意义的。找到文件的大小,然后用它来读取末尾的行数。
streamReader.BaseStream.Seek(skip_lines_offset, SeekOrigin.Begin);
string line = streamReader.ReadLine();
Seek
方法避免读取整个文件。你可以在这里阅读更多。skip_lines_offset
是行的字节偏移量,因此number_of_skipped_lines * bytes_In_Line