0

サイズが大きくなる可能性があるため、最後の行からテキスト ファイルを読み取り、今日のログの内容を確認したいだけです。

File.ReadLines() と success を使用して最後の行を読み込んでいます。前の行を読むにはどうすればよいですか?または、番号を減算できるように現在の行番号を取得する方法はありますか?

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 に答える