【发布时间】:2014-10-08 12:12:22
【问题描述】:
有一个我从未遇到过也没有听说过的奇怪问题。 StreamReader 类的 ReadLine() 函数似乎偶尔会返回 NULL,好像在文件末尾,但不是。
我的日志文件表明一切都在发生,就好像它实际上已经到达了文件的末尾,但它只是处理它的一部分。似乎没有任何一致性,因为如果我从头开始重新启动该过程,则整个文件都可以顺利处理。
很明显,文件本身并没有什么奇怪的地方,或者它每次都会在同一行上执行此操作,而且它已经发生在几个不同的文件中,并且每次重新运行时,它都可以正常工作。
有人遇到过类似的事情,或者对可能导致这种事情的原因有什么建议吗?
谢谢,
安德鲁
示例:
line = _readerStream.ReadLine();
if (null != line)
{
eventRetVal = loadFileLineEvent(line);
}
else
{
// do some housecleaning and log file completed
}
_readerStream 是已经在别处打开的流。
loadFileLineEvent 是一个委托,它在处理行时被传递。这有自己的错误处理(带有日志记录),所以那里没有问题。
上面的例程(未完整显示)也有错误处理(带有日志记录),这也没有被触发。
它到达“else”并记录它到达了文件的末尾,但从我得到的记录数中可以明显看出它没有。
【问题讨论】:
-
如果您将代码发布在您正在阅读的地方,这可能会有所帮助。这可能与您使用
StreamReader的方式有关。 -
发布sscce 以便我们重现问题
-
抱歉,我无法发布代码,因为它与工作相关,而不是我的个人资料。除了将 ReadLine() 语句分配给一个变量,然后检查该变量是否为 NULL 值之外,实际上并没有什么事情发生。我只是希望有人可能遇到过类似的情况,没想到有人会尝试修复我的实际代码。
-
@StarfleetSecurity 我不是在问你的真实(可能很大)代码,发布一个显示你的案例的最小示例代码..
-
很可能,有人仍在写入文件。由于
StreamReader是分批读取的,它可能甚至在您调用“最后一个”ReadLine之前就已经到达文件末尾,然后它就退出了。关键是,在文件完全写入并关闭之前不要开始读取文件。
标签: c# streamreader readline eof