设置位置StreamReader无法读取仅附加文本文件

时间:2018-05-09 08:16:50

标签: c# .net stream position streamreader

我有一个仅附加日志文件,由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

1 个答案:

答案 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)
                {
                   ......

现在它正在运作