Heim > Backend-Entwicklung > C++ > Wie kann ich mit C#eine Textdatei in umgekehrter Reihenfolge effizient lesen?

Wie kann ich mit C#eine Textdatei in umgekehrter Reihenfolge effizient lesen?

Patricia Arquette
Freigeben: 2025-01-29 12:01:20
Original
152 Leute haben es durchsucht

Lesen Sie die C#Textdateimethode im Detail

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

Im Programmdesign muss die Textdatei manchmal rückwärts gelesen werden. Dies kann von Iteratoren implementiert werden, wodurch sequentielle Verarbeitungsdaten ermöglicht werden können, ohne die gesamte Datei in den Speicher zu laden, um die Effizienz zu verbessern.

Beim Lesen der Textdatei muss die Codierungsmethode der Datei berücksichtigt werden. Wenn bei der Datei beispielsweise die UTF-8-Codierung verwendet wird, müssen Sie die Startposition jedes Unicode-Zeichens korrekt identifizieren und eine ungültige UTF-8-Sequenz verarbeiten.

Das folgende C# -Codefragment zeigt, wie Sie mit dem Iterator die Textdatei lesen:

<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>
Nach dem Login kopieren
Dieser Code kann die Textdatei umgekehrt lesen und jede in der Reihenfolge generierte Zeile verarbeiten. Es verwendet den Iterator, um zu vermeiden, dass die gesamte Datei gleichzeitig in Speicher gelesen wird, wodurch die Effizienz der Verarbeitung großer Dateien verbessert wird. Gleichzeitig verwendet es , um die korrekte Verarbeitung von UTF-8-Codierungsdateien zu gewährleisten.

Das obige ist der detaillierte Inhalt vonWie kann ich mit C#eine Textdatei in umgekehrter Reihenfolge effizient lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage