忽略這些線條,它們是無用的 - 如果每條線條的長度不一樣,那麼您將不得不逐一閱讀它們,這是一個巨大的浪費。
而是使用文件流的位置。這樣,您可以在第二次嘗試時跳到那裏,不需要再次讀取數據。之後,您只需在循環中使用ReadLine
,直到完成,並標記新的結束位置。
請,不要使用ReadLines().Skip()
。如果你有一個10 GB的文件,它將讀取所有的10 GB,創建適當的字符串,扔掉它們,最後讀取你想讀取的100個字節。這只是瘋狂:)當然,它比使用File.ReadAllLines
更好,但只是因爲它不需要一次將整個文件保存在內存中。除此之外,你還在讀文件的每一個字節(你必須找出行結束的地方)。的方法的
示例代碼從最後已知位置讀:
string[] ReadAllLinesFromBookmark(string fileName, ref long lastPosition)
{
using (var fs = File.OpenRead(fileName))
{
fs.Position = lastPosition;
using (var sr = new StreamReader(fs))
{
string line = null;
List<string> lines = new List<string>();
while ((line = sr.ReadLine()) != null)
{
lines.Add(line);
}
lastPosition = fs.Position;
return lines.ToArray();
}
}
}