0

我想从最后一行读取一个文本文件,因为它可能很大并且只想检查今天的日志内容。

我正在使用File.ReadLines() 并成功阅读最后一行。我怎样才能阅读上一行?或者有什么方法可以获取当前行号以便我可以减去该数字?

foreach (string f in Directory.GetFiles(sDir, "*.log", SearchOption.AllDirectories))
{
    string last = File.ReadLines(f, Encoding.Default).Last(); //read Last Line here

    if (last.IndexOf("error", StringComparison.OrdinalIgnoreCase) > 0)
    {
        WriteError(last);
    }
}
4

2 回答 2

0

我不清楚您是否要求避免阅读整个文件(在这种情况下,提出的重复答案是解决此问题的最佳方法),或者您只是想弄清楚下一个 -文件中的最后一行。

如果是后者,那么这将起作用:

string[] Tail(string file, int maxLinesToReturn, Encoding encoding)
{
    Queue<string> mostRecentLines = new Queue<string>();

    foreach (string line in File.ReadLines(file, encoding))
    {
        if (mostRecentLines.Count >= maxLinesToReturn)
        {
            mostRecentLines.Dequeue();
        }
        mostRecentLines.Enqueue(line);
    }

    return mostRecentLines.ToArray();
}

像这样使用:

foreach (string f in Directory.GetFiles(sDir, "*.log", SearchOption.AllDirectories))
{
    foreach (string line in Tail(f, 2, Encoding.Default)
        .Where(line => line.IndexOf("error", StringComparison.OrdinalIgnoreCase) > 0)))
    {
        WriteError(line);
    }
}
于 2014-12-02T03:40:21.273 回答
0
foreach (string f in Directory.GetFiles(sDir, "*.log", SearchOption.AllDirectories))
{
    string last="", prev="";
    foreach (string cur in  File.ReadLines(f, Encoding.Default) )
    {
        prev = last;
        last = cur;
    }

    //not sure what you want to do with "prev" here.
    if (last.IndexOf("error", StringComparison.OrdinalIgnoreCase) > 0)
    {
        WriteError(last);
    }
}
于 2014-12-02T03:32:46.237 回答