在同一语句中检查流和结束流

时间:2013-12-24 15:41:26

标签: c# streamreader

while ((line = sr.ReadLine()) != null && !sr.EndOfStream)

这不起作用。它实际上保持循环,我得到一个异常,因为“line”为null,并且已达到EndofStream。有什么想法吗?

4 个答案:

答案 0 :(得分:4)

您只需使用以下内容,ReadLine将在文件结束时返回null,因此无需检查EndOfStream

while ((line = streamReader.ReadLine()) != null)
{
    // do stuff
}

MSDN

  

返回值   键入:System.String   输入流的下一行,如果到达输入流的末尾,则为null。

答案 1 :(得分:1)

如果将两个检查放在一起,即使ReadLine()在到达EndOfStream之前为空,代码也会转义为循环。以下是细分版本,但将通过整个流程。

while (!sr.EndOfStream)
{
   if ((line = sr.ReadLine()) != null)
   {
      //do your work here
   }
}

答案 2 :(得分:0)

仅使用此部分

while ((line = sr.ReadLine()) != null)
{
   // your code
}

答案 3 :(得分:0)

如果您想跳过空行:文本文件中的行不能为空,在这种情况下为null表示没有更多行。因此,如果您想检查一行是否为空,(line = sr.ReadLine()) != null将无效。你可以这样做,虽然还有很多其他方法:

while ((line = sr.ReadLine()) != null)
    if (!line.Trim().Equals("")) {
        // Do something 
    }
}