2012-07-24 31 views
21

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 .:Leer la última línea del archivo de texto

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

Espero que esto tenga sentido.

+1

Lo han intentado? Tenga en cuenta que solo podemos ayudar con "1" ... "2" depende totalmente de usted. –

+0

byte b; fs.Seek (0, SeekOrigin.End); for (offset largo = 0; offset

+0

@DebbieDippenaar para archivos extremadamente grandes, que * podría no ser una mala idea *. Personalmente, probablemente haya leído * búferes * de bytes a la vez, y usted tendrá algunos problemas importantes con las codificaciones de varios bytes, pero ... –

Respuesta

52

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

A menos que su archivo es por lo grande que realmente no puede permitirse el lujo de leerlo todo, que acababa de usar:

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

Tenga en cuenta que este utiliza File.ReadLines, no File.ReadAllLines. Si está utilizando .NET 3.5 o una versión anterior, necesitará usar File.ReadAllLines o escribir su propio código: ReadAllLines leerá el archivo completo en la memoria de una vez, mientras que ReadLines lo transmite.

De lo contrario, la forma complicada es usar 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.

+0

Si conoce la codificación del archivo que realmente no necesita manejar mucha maldad si solo estás buscando el último salto de línea que tiene otros personajes que lo siguen. P.ej.U + 000D U + 000A no será de longitud variable en ninguna codificación de longitud variable como UTF-8 o UTF-16. Y todo el resto que sigue normalmente se puede suponer que está bien formado. – Joey

+0

@Joey: Lo delicado es que si buscas retroceder a un lugar arbitrario en el archivo, debes ser consciente de que puedes tener un carácter medio. No es tanto un problema para UTF-16, pero en UTF-8 necesitas alinearte con un límite de caracteres ... y podrías saltar al "\ n" de "\ r \ n", entonces tendrías para ir hacia atrás otra vez Básicamente, eche un vistazo al código en la respuesta vinculada. Si puedes escribir una versión más simple, por favor hazlo, estaría realmente interesado en verla. –

+0

Me falta algo aquí. File.ReadLines devuelve un objeto System.Collections.Generic.IEnumerable que no tiene el método "Last" cuando intento usarlo. Mi código está dirigido al framework .NET 4.0. ¿Me falta alguna referencia de montaje u otra cosa? – dscarr

6

yo simplemente combinar File.ReadLines(path) y Enumerable.Last:

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

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

+0

Genial, gracias chicos. ¡Esto me lo abrió un poco! –

+0

cómo obtener el último símbolo de archivo de texto? – Neel

+0

@Neel Yendo hacia atrás en la última línea, pero con un carácter. – Max

7

Primera parte:

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

o

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

readlines se prefiere.

6
string m = ""; 
StreamReader r = new StreamReader("file_path"); 
while (r.EndOfStream == false) 
{ 
    m = r.ReadLine(); 
} 
Console.WriteLine("{0}\n", m); 
r.Close(); 
-3
string last = File.ReadLines(@"C:\file.txt").Last(); 
string lastsymbol = last[last.Count - 1]; 
Cuestiones relacionadas