2012-05-02 21 views

答えて

12

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'sライブラリMiscUtil直接ではなく、コードを貼り付け/コピーを使用することをお勧めします。

+0

ニースを行うことができます!ありがとう、それを試してみましょう。 – 0x49D1

+0

ライブラリがNuget ..ではないことに奇妙な!ありがとう! – 0x49D1

+0

可能な複製で私の答えを見てください。http://stackoverflow.com/a/33907602/4821032 –

-2

それとも、それを2つのライン(.NET 4のみ)

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

これは完全なファイルの内容をメモリに読み込みます – RJFalconer

+0

これは仕事をすることができますが、メモリは非常に非効率的で(RJFalconerノートのように)大量の遅延 - ファイルを読むことは、プログラムでできることの中で最も遅いことの1つです。まれにしか読んでいない場合、これはうまくいくかもしれませんが、これは強力でプロフェッショナルなソリューションから得られたものです。 –

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; 
} 
関連する問題