获取海量文本文件(超过 10GB)的最后 10 行:一种高效的 C# 方法
处理超过 10 GB 的海量文本文件时10GB,提取最后几行可能会带来性能挑战。以下是如何使用 C# 有效实现此目的:
代码实现:
这种通用方法允许您指定要提取的令牌数量 (numberOfTokens)、文件路径(路径)、编码(encoding)和标记分隔符(tokenSeparator):
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中文网其他相关文章!