StreamReader ReadLine在不是EOF时返回null

有一个我从未遇到过或听说过的奇怪问题。 似乎有时,StreamReader类的ReadLine()函数将返回NULL,就好像它位于文件的末尾,但它不是。

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

很明显,文件本身并没有任何时髦,或者每次都会在同一行上执行此操作,而且它发生在几个不同的文件中,每次重新运行时,它都可以正常工作。

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

谢谢,

安德鲁

样品:

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

_readerStream是已在其他位置打开的流。

loadFileLineEvent是一个传递的委托,它处理该行。 这有自己的error handling(使用日志记录),因此没有问题。

上面的例程(未完整显示)也有围绕它的error handling(带有记录),也没有被触发。

它正在进入“else”并记录它到达文件的末尾,但从我得到的记录数量中可以明显看出它没有。

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

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