带索引的快速阅读文件

时间:2015-11-02 04:28:34

标签: c# linq readlines

我正在尝试阅读一个巨大的文件。以前我使用File.ReadLines,它不会将整个数据读入内存。现在我需要访问之前的&迭代时的下一行。我尝试阅读整个文件,但获得了OutofMemoryException

然后我开始寻找解决方案,发现我可以使用Linq。我尝试使用以下内容:

    var inputLines = File.ReadLines(filePath);
    int count = inputLines.Count();
    for (int i = 0; i < count; i++)
    {
        string line = inputLines.Skip(i).Take(1).First();
    }

这很慢。我想每次跳过然后Take,它会在每个循环中一遍又一遍地读取所有行。

有更好的方法吗?我现在能想到的唯一解决方案是将我的文件拆分成更小的块,这样我就可以阅读它,但我真的不相信没有解决方法。

1 个答案:

答案 0 :(得分:1)

您是否在遍历文件中的所有行并想要在每次查看新行时比较三行(上一行,当前行和下一行)?

如果是这样,那么在迭代所有这些行时,只需跟踪最后两行:

    string previousLine = null,
           currentLine = null;

    foreach (string nextLine in File.ReadLines(filePath))
    {
        if (previousLine == null)
        {
            // Do something special for the first two lines?
        }
        else
        {
            // You're past the first two lines and now have previous,
            // current, and next lines to compare.
        }

        // Save for next iteration
        previousLine = currentLine;
        currentLine = nextLine;
    }