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:
- Encuentra la última línea de archivo.
- 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();