如何高效地读取文本文件的最后一行

5

需要从大型日志文件中获取最后一行。怎么做最好?

3个回答

14

不错!谢谢,我会试一下。 - 0x49D1
1
奇怪的是这个库不在Nuget里面。谢谢! - 0x49D1
请查看我在可能的重复问题中的回答:https://dev59.com/YnRC5IYBdhLWcg3wJNgN#33907602 - Xan-Kun Clark-Davis
1
我知道这个答案是过去的,但对于任何阅读此内容的人,“您不应直接使用Jon Skeet的库”,正如Jon Skeet本人所说,而是要复制/粘贴,从代码中获取您想要的内容。 https://github.com/jpsingleton/ANCLAFS/issues/6 - joedotnot

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

-2

或者您可以使用两行代码来实现(仅适用于 .Net 4)

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

虽然这样可以完成工作,但它非常浪费内存(正如RJFalconer所指出的),而且还有很大的延迟 - 记住,在程序中读取文件是最慢的操作之一。如果您只偶尔需要读取,那么这可能可行,但这远远不是一个强大、专业的解决方案。 - Andrew Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接