2012-05-02 138 views

回答

12

你想读的向后使用ReverseLineReader文件:

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

然后在其上运行.Take(1)

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

你要使用Jon Skeet'sMiscUtil,而不是直接复制/粘贴代码。

+0

不错!谢谢你,会试试看。 – 0x49D1

+0

奇怪的是,图书馆不在Nuget ..谢谢! – 0x49D1

+0

见我的答案可能重复http://stackoverflow.com/a/33907602/4821032 –

-2

或者你可以做两个线路(.NET 4只)

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

这读取完整的文件内容到内存 – RJFalconer

+0

虽然这可以做的工作,这是令人难以置信的内存效率低下(如RJFalconer笔记),也有延迟的一个很大 - 请记住,阅读文件,你可以在程序中做的最慢的事情之一。如果你只是偶尔阅读,这可能奏效,但是这是从一个强大的,专业的解决方案_far_。 –

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; 
} 
相关问题