ホームページ >バックエンド開発 >C++ >C#を使用してテキストファイルを逆順序で効率的に読み取るにはどうすればよいですか?

C#を使用してテキストファイルを逆順序で効率的に読み取るにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-29 12:01:20154ブラウズ

C#テキストファイルメソッドを詳細にお読みください

How Can I Efficiently Read a Text File in Reverse Order Using C#?

プログラム設計では、テキストファイルを後方に読み取る必要がある場合があります。 これは、ファイル全体をメモリにロードせずに効率を向上させることなく、シーケンシャル処理データを可能にするIteratorによって実装できます。

テキストファイルを逆に読むとき、ファイルのエンコード方法を考慮する必要があります。たとえば、ファイルがUTF-8コーディングを使用する場合、各ユニコード文字の開始位置を正しく識別し、無効なUTF-8シーケンスを処理する必要があります。

次のC#コードフラグメントは、イテレーターを使用してテキストファイルを読み取る方法を示しています。

このコードは、テキストファイルを逆に読み取り、生成された各行を順番に処理できます。 Iteratorを使用して、ファイル全体を一度にメモリに読み取らないようにし、大きなファイルを処理する効率を向上させます。 同時に、UTF-8コーディングファイルの正しい処理を確保するためにを使用します。
<code class="language-csharp">using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;

public static class ReverseFileStreamReader
{
    public static IEnumerable<string> ReadFileLinesReverse(string filePath)
    {
        using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            long fileLength = fileStream.Length;
            byte[] buffer = new byte[1024];

            for (long position = fileLength - buffer.Length; position >= 0; position -= buffer.Length)
            {
                fileStream.Seek(position, SeekOrigin.Begin);
                int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
                var lines = GetLinesFromBuffer(buffer, bytesRead);

                foreach (var line in lines)
                {
                    yield return line;
                }
            }
        }
    }

    private static IEnumerable<string> GetLinesFromBuffer(byte[] buffer, int bytesRead)
    {
        return new string(GetCharactersFromBuffer(buffer, bytesRead))
            .Split('\n')
            .Reverse();
    }

    private static IEnumerable<char> GetCharactersFromBuffer(byte[] buffer, int bytesRead)
    {
        using (var memoryStream = new MemoryStream(buffer, 0, bytesRead))
        {
            using (var streamReader = new StreamReader(memoryStream, Encoding.UTF8))
            {
                while (!streamReader.EndOfStream)
                {
                    yield return (char)streamReader.Read();
                }
            }
        }
    }
}</code>

以上がC#を使用してテキストファイルを逆順序で効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。