5

大きなログ ファイルから最後の行だけを取得する必要があります。それを行う最善の方法は何ですか?

4

3 に答える 3

14

を使用してファイルを逆方向​​に読み取りたい場合ReverseLineReader:

C#でイテレータを使ってテキストファイルを逆に読む方法

次に、それを実行.Take(1)します。

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

コードをコピーして貼り付けるのではなく、Jon Skeet のライブラリMiscUtilを直接使用することをお勧めします。

于 2012-05-02T08:13:47.840 に答える
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;
}
于 2014-11-22T23:46:08.587 に答える
-2

または、2行で実行できます(.Net 4のみ)

var lines = File.ReadLines(path);
string line = lines.Last();
于 2012-05-18T17:24:44.583 に答える