当不是EOF时,StreamReader ReadLine返回null

时间:2014-08-14 18:16:02

标签: c# streamreader readline eof

遇到一个我从未遇到过但也没有听说过的奇怪问题。似乎偶尔会有StreamReader类的ReadLine()函数返回NULL,就像它在文件末尾一样,但它不是。

我的日志文件表明一切都在发生,就好像它实际上已经到达文件的末尾,但它只是处理它的一部分。似乎没有任何一致性,因为如果我从头开始重新启动该过程,整个文件将被处理而不会发生意外。

显然,文件本身并没有什么时髦,或者每次都会在同一行上执行此操作,加上它发生在几个不同的文件中,每次重新运行时,它都能正常工作。 / p>

任何人都遇到类似的事情,或者对可能造成这种事情的事情有任何建议?

谢谢,

安德鲁

样品:

line = _readerStream.ReadLine();

if (null != line)
{
    eventRetVal = loadFileLineEvent(line);
}
else
{
    // do some housecleaning and log file completed
}

_readerStream是已在别处打开的流。

loadFileLineEvent是一个传递的委托,用于处理该行。这有自己的错误处理(使用日志记录),所以那里没有问题。

上面的例程(未完整显示)也有错误处理(带记录),也没有被触发。

它到了"否则"并记录它到达文件的末尾,但从我得到的记录数量中可以明显看出它没有。

1 个答案:

答案 0 :(得分:1)

您是否尝试过更传统的方法来阅读流?这样就可以在读取下一个可能为空的/ null行之前检查流的结尾。好像你的代码应该工作,但是为了尝试读取不存在的行而抛出可能的null异常(不确定SR是否会抛出该代码)。

 using (StreamReader SR = new StreamReader(OFD.FileName))
 {
     while (!SR.EndOfStream)
     {
         string CurrentLine = SR.ReadLine();
         var eventRetVal = loadFileLineEvent(CurrentLine);
     }
 }