首頁 > 後端開發 > C++ > 如何在C#中高效率讀取10GB文字檔的最後10行?

如何在C#中高效率讀取10GB文字檔的最後10行?

Patricia Arquette
發布: 2024-12-29 02:03:09
原創
440 人瀏覽過

How to Efficiently Read the Last 10 Lines of a 10GB  Text File in C#?

檢索海量文字檔案(超過10GB)的最後10 行

在文字處理領域,一個常見的挑戰是提取非常大的文字檔案的最後幾行。當處理超過 10GB 的檔案時,傳統方法可能會力不從心。本文使用 C# 提出了此問題的有效解決方案,並提供了一個程式碼片段來演示其實作。

為了有效檢索最後 10 行,該策略涉及從末尾向後遍歷文件。由於行數可能是可變的,因此我們迭代地向後查找,直到遇到 10 個換行符。到達此點後,我們向前讀取剩餘內容以捕獲最後 10 行。

考慮以下實作:

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);
    }
}
登入後複製

此程式碼處理下列情況:檔案小於10,並適當調整讀取操作。編碼參數允許根據檔案的編碼進行自訂,並且可以使用 tokenSeparator 來檢索不同分隔符號的最後連續元素。

透過採用這種方法,您可以有效地檢索海量文字的最後 10 行文件,確保高效處理和準確結果。

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

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