txt texto por net lineas linea leer jalar fichero escribir documento dat contenido como caracter archivo c#

c# - por - Leer la última línea de archivo de texto



leer lineas fichero texto c# (6)

Necesito saber cómo leer la última línea de un archivo de texto. Necesito encontrar la línea y luego procesarla en una base de datos SQL ... He estado leyendo y recorriendo la Web, pero estoy luchando para encontrar la forma correcta de hacerlo. Es decir:

  1. Encuentra la última línea de archivo.
  2. Procesar la última línea de archivo.

Espero que esto tenga sentido.


Hay dos formas: simples e ineficientes, o tremendamente complicadas pero eficientes. La versión complicada asume una codificación sensata.

A menos que su archivo sea tan grande que realmente no pueda permitirse leerlo todo, simplemente usaría:

var lastLine = File.ReadLines("file.txt").Last();

Tenga en cuenta que esto utiliza File.ReadLines , no File.ReadAllLines . Si usa .NET 3.5 o una File.ReadAllLines anterior, necesitará usar File.ReadAllLines o escribir su propio código: ReadAllLines leerá todo el archivo en la memoria de una sola vez, mientras que ReadLines transmite.

De lo contrario, la forma complicada es usar un código similar a this . Intenta leer hacia atrás desde el final del archivo, manejando mal gusto como los caracteres de varios bytes de UTF-8. No es agradable.


Para el rendimiento, incluso para archivos de tamaño pequeño o mediano, sugiero leer hacia atrás hasta que toques un carácter / n, luego lee todo después del carácter / n. Independientemente de la página de códigos, / n es más probable que siempre represente una nueva línea.

Si está monitoreando muchos archivos a la vez y está usando algo como un FileSystemWatcher en C #, esta ganancia de rendimiento será muy importante.

C # Code ...
(no se realizan comprobaciones de errores, no maneja los casos en los que se agregaron dos líneas nuevas desde el último cheque o una línea en proceso de escritura):

public static string ReadLastLine(string path) { Stream fs = File.OpenRead(path); byte b; fs.Position = fs.Length; while (fs.Position > 0) { fs.Position--; b = (byte)fs.ReadByte(); if (b == ''/n'') { break; } fs.Position--; } byte[] bytes = new byte[fs.Length - fs.Position]; fs.Read(bytes, 0, bytes.Length); fs.Close(); return Encoding.UTF8.GetString(bytes); }


Primera parte:

File.ReadAllLines(@"c:/some/path/file.txt").Last();

o

File.ReadLines(@"c:/some/path/file.txt").Last();

ReadLines es preferido.


Simplemente combinaría File.ReadLines y Enumerable.Last :

String last = File.ReadLines(@"C:/file.txt").Last();

File.ReadAllLines las líneas y no carga todo en la memoria como File.ReadAllLines .


string last = File.ReadLines(@"C:/file.txt").Last(); string lastsymbol = last[last.Count - 1];


string m = ""; StreamReader r = new StreamReader("file_path"); while (r.EndOfStream == false) { m = r.ReadLine(); } Console.WriteLine("{0}/n", m); r.Close();