Maison > développement back-end > C++ > Comment puis-je lire efficacement un fichier texte dans l'ordre inverse en utilisant C #?

Comment puis-je lire efficacement un fichier texte dans l'ordre inverse en utilisant C #?

Patricia Arquette
Libérer: 2025-01-29 12:01:20
original
152 Les gens l'ont consulté

Lisez la méthode du fichier texte C # en détail

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

Dans la conception du programme, le fichier texte doit parfois être lu en arrière. Cela peut être implémenté par les itérateurs, ce qui permet des données de traitement séquentielles sans charger le fichier entier en mémoire pour améliorer l'efficacité.

Lors de la lecture du fichier texte inversé, la méthode d'encodage du fichier doit être considérée. Par exemple, si le fichier utilise le codage UTF-8, vous devez identifier correctement la position de départ de chaque caractère Unicode et traiter toute séquence UTF-8 non valide.

Le fragment de code C # suivant montre comment utiliser l'itérateur pour lire le fichier texte:

<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>
Copier après la connexion
Ce code peut lire le fichier texte inversé et traiter chaque ligne générée dans l'ordre. Il utilise l'itérateur pour éviter de lire l'ensemble du fichier en mémoire à la fois, améliorant ainsi l'efficacité du traitement des fichiers volumineux. Dans le même temps, il utilise pour assurer le traitement correct des fichiers de codage UTF-8.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal