2015-11-02 71 views
0

我想读取一个巨大的文件。以前我用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(); 
    } 

这很慢。我认为每次跳过,然后继续,每次循环时都会一遍又一遍读取所有行。

有没有更好的方法来做到这一点?我现在唯一能想到的解决方案就是将我的文件分割成更小的块,这样我就可以读取它,但我无法真正相信没有解决方法。

回答

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; 
    } 
+0

我需要阅读当前行我读的从previousLine和nextLine。我想你的方式,但它会有点复杂。当我解析数据时,会有很多if语句。 – ykh

+0

对不起,我刚刚意识到你还想要下一行。我更新了我的建议解决方案我相信你只需要单一的if语句吧? –