我正在尝试阅读一个巨大的文件。以前我使用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,它会在每个循环中一遍又一遍地读取所有行。
有更好的方法吗?我现在能想到的唯一解决方案是将我的文件拆分成更小的块,这样我就可以阅读它,但我真的不相信没有解决方法。
答案 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;
}