我正在尝试用C#编写一个控制台应用程序来读取日志文件。我面临的问题是这个日志文件每1小时更新一次,例如,如果我在开始时有10行,之后有12行,在我的第二次读取尝试中,我将只读取2个新添加的行。 你能否建议我有效地做到这一点(不需要再次读取所有行,因为日志文件通常有5000多行)?
答案 0 :(得分:2)
首先,您可以使用FileSystemWatcher
在文件更改后收到通知。
Morover,您可以使用FileStream
和Seek
功能仅准备新添加的行。在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;
}
}