首頁 > 後端開發 > C++ > 如何在 C# 中高效地從 10GB 文字檔案中提取最後 10 行?

如何在 C# 中高效地從 10GB 文字檔案中提取最後 10 行?

Susan Sarandon
發布: 2024-12-30 06:28:11
原創
174 人瀏覽過

How Can I Efficiently Extract the Last 10 Lines from a 10GB  Text File in C#?

取得海量文字檔案(超過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);
    }
}
登入後複製
求到檔案末端並開始向後移動,讀取標記分隔符位元組。

計算遇到的令牌,並在達到所需令牌數量時停止。

從目前位置讀取剩餘位元組到檔案結尾。
  1. 處理文件中token數量小於預期數量的情況。
  2. 透過利用這種方法,您可以有效地提取大量文字檔案的最後幾行,解決了其大尺寸帶來的挑戰。

以上是如何在 C# 中高效地從 10GB 文字檔案中提取最後 10 行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板