我有一个仅附加日志文件,由FileSystemWatcher监控。更改文件后,将为sector_id
对象调用Read()
。
应该逐行读取日志文件。
目标是阅读仅更改,即行添加到日志文件中(跳过已经退回的行)。 因此StreamReader应该从上一次读取结束的位置开始读取。
到目前为止,我的解决方案无效。当我添加
1
2
3
4
在Notepad ++中逐行到我的文本文件&每次添加一行时保存,Debug输出为
LogFile
输出应为
Initial read
1 //OK
2 //OK
3 //OK
1 //looks like the log file is read again from the beginning
2
3
4
有什么想法可以解决这个问题吗?
控制台代码
Initial read
1
2
3
4
答案 0 :(得分:1)
问题是
position = fs.Length; //store the length of the stream
你应该将流的当前位置存储到位置字段而不是流的长度,因为有时FileStream.Length为零(我不知道为什么)
this.position = fs.Position;
并检查FileStream.Length是否为零跳过该更改
fs = new FileStream(this._fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
if (fs.Length != 0)
{
try
{
sr = new StreamReader(fs);
if (this.Contents.Count == 0)
{
......
现在它正在运作