阅读C#百万行

时间:2015-06-08 00:02:54

标签: c# text row line streamreader

我有一个很长的文本文件。所有行都具有相同的长度。我想在C#中读取百万行而没有先读取之前的999999行,否则程序会变得太慢。我该怎么办?

3 个答案:

答案 0 :(得分:17)

试试这个

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;
}​

答案 1 :(得分:5)

你知道每行中字节的数量吗?

NB 了解字符数是不够的。

如果你知道它使用了固定数量的字节:

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();

虽然第二个选项仍然需要枚举行,但它可以避免一次性将整个文件读入内存中。

答案 2 :(得分:1)

streamReader.BaseStream.Seek(skip_lines_offset, SeekOrigin.Begin);

string line = streamReader.ReadLine();

Seek方法避免读取整个文件。您可以阅读更多hereskip_lines_offset是该行的字节偏移量,因此number_of_skipped_lines * bytes_In_Line