如何读取在c#中每小时更新一次的日志文件?

时间:2015-09-09 08:38:50

标签: c# loops logfile memory-efficient

我正在尝试用C#编写一个控制台应用程序来读取日志文件。我面临的问题是这个日志文件每1小时更新一次,例如,如果我在开始时有10行,之后有12行,在我的第二次读取尝试中,我将只读取2个新添加的行。 你能否建议我有效地做到这一点(不需要再次读取所有行,因为日志文件通常有5000多行)?

1 个答案:

答案 0 :(得分:2)

首先,您可以使用FileSystemWatcher在文件更改后收到通知。

Morover,您可以使用FileStreamSeek功能仅准备新添加的行。在http://www.codeproject.com/Articles/7568/Tail-NET上有Thread.Sleep的示例:

using ( StreamReader reader = new StreamReader(new FileStream(fileName, 
                     FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) )
{
    //start at the end of the file
    long lastMaxOffset = reader.BaseStream.Length;

    while ( true )
    {
        System.Threading.Thread.Sleep(100);

        //if the file size has not changed, idle
        if ( reader.BaseStream.Length == lastMaxOffset )
            continue;

        //seek to the last max offset
        reader.BaseStream.Seek(lastMaxOffset, SeekOrigin.Begin);

        //read out of the file until the EOF
        string line = "";
        while ( (line = reader.ReadLine()) != null )
            Console.WriteLine(line);

        //update the last max offset
        lastMaxOffset = reader.BaseStream.Position;
    }
}