取得海量文字檔案(超過10GB)的最後10 行:一種高效的C# 方法
處理超過10 GB 的海量文本檔案時10GB,提取最後幾行可能會帶來效能挑戰。以下是如何使用 C# 有效實現此目的:
程式碼實作:
這種通用方法可讓您指定要擷取的令牌數量。指定編碼中字元的大小。
public static string ReadEndTokens(string path, Int64 numberOfTokens, Encoding encoding, string tokenSeparator) { int sizeOfChar = encoding.GetByteCount("\n"); byte[] buffer = encoding.GetBytes(tokenSeparator); using (FileStream fs = new FileStream(path, FileMode.Open)) { Int64 tokenCount = 0; Int64 endPosition = fs.Length / sizeOfChar; for (Int64 position = sizeOfChar; position < endPosition; position += sizeOfChar) { fs.Seek(-position, SeekOrigin.End); fs.Read(buffer, 0, buffer.Length); if (encoding.GetString(buffer) == tokenSeparator) { tokenCount++; if (tokenCount == numberOfTokens) { byte[] returnBuffer = new byte[fs.Length - fs.Position]; fs.Read(returnBuffer, 0, returnBuffer.Length); return encoding.GetString(returnBuffer); } } } // handle case where number of tokens in file is less than numberOfTokens fs.Seek(0, SeekOrigin.Begin); buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); return encoding.GetString(buffer); } }
計算遇到的令牌,並在達到所需令牌數量時停止。
從目前位置讀取剩餘位元組到檔案結尾。以上是如何在 C# 中高效地從 10GB 文字檔案中提取最後 10 行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!