¿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.
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# lines = new List ();
private static List
private static void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
string line;
}
“`
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 unStreamReader
y lo leemos línea por línea. Si encontramos una línea que no está presente en la listalines
, 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.