es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo leer las últimas líneas insertadas en un archivo .txt con C#?

Mi objetivo es leer las últimas líneas insertadas de un archivo de texto y mostrar solo las líneas recién insertadas en la consola. Aquí está mi código:

“`
class Program
{
static void Main(string[] args)
{
string path = @”D:\tmp”;

    MonitorFile(path);

    Console.ReadKey();
}

private static void MonitorFile(string path)

{ 

    FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();

    fileSystemWatcher.Path = path;

    fileSystemWatcher.Filter = "file.txt";

    fileSystemWatcher.Changed += FileSystemWatcher_Changed;

    fileSystemWatcher.EnableRaisingEvents = true;

}

private static void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)

{
    Console.WriteLine("");    //A partir de aquí, las nuevas líneas insertadas deben mostrarse en la consola.
}

}

Mi objetivo es que cada vez que se agreguen nuevas líneas al final del archivo de texto, solo las nuevas líneas insertadas vendrán una tras otra en la consola. Aquí utilicé FileSystemWatcher para identificar el cambio en el archivo de texto, pero parece que los datos insertados no se pueden leer desde FileSystemWatcher. Cualquier ayuda será realmente apreciable.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para leer sólo las líneas recién insertadas de un archivo de texto (txt) y mostrarlas en la consola, puede modificar el manejador de eventos FileSystemWatcher_Changed de la siguiente manera:

    “`c#
    private static List lines = new List();

    private static void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
    {
    string line;

    using (StreamReader reader = File.OpenText(e.FullPath))
    {
        while ((line = reader.ReadLine()) != null)
        {
            if (!lines.Contains(line))
            {
                lines.Add(line);
                Console.WriteLine(line); // mostrar línea recién insertada
            }
        }
    }
    

    }
    “`

    Aquí, mantenemos una lista de todas las líneas del archivo de texto que ya se han mostrado previamente en la consola. Cuando se dispara el evento FileSystemWatcher_Changed, abrimos el archivo correspondiente a los argumentos del evento (e.FullPath) utilizando un StreamReader y lo leemos línea por línea. Si encontramos una línea que no está presente en la lista lines, eso significa que es una línea recién insertada, por lo que la agregamos a la lista y la mostramos en la consola.

    Tenga en cuenta que este enfoque supone que el archivo de texto sólo tiene texto añadido al final, y no insertado en el medio. Si necesita manejar también el texto insertado, deberá modificar el código para hacer un seguimiento de los números de línea y compararlos en lugar de las líneas reales.

Comments are closed.