2012-05-02 28 views

Antwort

12

Sie wollen die Datei rückwärts ReverseLineReader mit lesen:

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

Dann .Take(1) darauf laufen.

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

Sie wollen MiscUtilJon Skeet's Bibliothek verwenden, direkt anstatt Kopieren/den Code einfügen.

+0

Nizza tun! Danke, werde es versuchen. – 0x49D1

+0

Seltsam, dass die Bibliothek nicht in Nuget ist .. Danke! – 0x49D1

+0

Siehe meine Antwort in der möglichen Duplikat http://StackOverflow.com/a/33907602/4821032 –

-2

Oder Sie können es zwei Linie (.Net 4 nur)

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

Dies liest den gesamten Inhalt der Datei in den Speicher – RJFalconer

+0

Während dies den Job erledigen kann, ist es unglaublich Speicher ineffizient (wie RJFalconer Notizen) und hat auch viel Latenz - denken Sie daran, dass das Lesen einer Datei eines der langsamsten Dinge ist, die Sie in einem Programm tun können. Wenn Sie nur selten lesen, könnte dies funktionieren, aber das ist _far _ von einer starken, professionellen Lösung. –

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; 
} 
Verwandte Themen