2012-05-02 18 views

Respuesta

12

desea leer el archivo hacia atrás usando ReverseLineReader:

How to read a text file reversely with iterator in C#

A continuación, ejecute .Take(1) en él.

var lines = new ReverseLineReader(filename); 
var last = lines.Take(1); 

Usted querrá utilizar Jon Skeet's biblioteca MiscUtil directamente en lugar de copiar/pegar el código.

+0

Nice! Gracias, lo intentaré. – 0x49D1

+0

Es extraño que la biblioteca no esté en Nuget ... ¡Gracias! – 0x49D1

+0

Ver mi respuesta en el posible duplicado http://stackoverflow.com/a/33907602/4821032 –

-2

O bien, puede hacerlo de dos líneas (.Net 4 solamente)

var lines = File.ReadLines(path); 
string line = lines.Last(); 
+2

Esto lee el contenido completo del archivo en la memoria – RJFalconer

+0

Si bien esto puede hacer el trabajo, es increíblemente ineficiente en memoria (como notas RJFalconer) y también tiene una gran cantidad de latencia: recuerde que leer un archivo es una de las cosas más lentas que puede hacer en un programa. Si solo lees con poca frecuencia, esto podría funcionar, pero esto es una solución sólida y profesional. –

2
String lastline=""; 
    String filedata; 

    // Open file to read 
    var fullfiledata = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
    StreamReader sr = new StreamReader(fullfiledata); 

    //long offset = sr.BaseStream.Length - ((sr.BaseStream.Length * lengthWeNeed)/100); 
    // Assuming a line doesnt have more than 500 characters, else use above formula 
    long offset = sr.BaseStream.Length - 500; 

    //directly move the last 500th position 
    sr.BaseStream.Seek(offset, SeekOrigin.Begin); 

    //From there read lines, not whole file 
    while (!sr.EndOfStream) 
    { 
     filedata = sr.ReadLine(); 
     // Interate to see last line 
     if (sr.Peek() == -1) 
     { 
      lastline = filedata; 
     } 
    }  

    return lastline; 
} 
Cuestiones relacionadas