【问题标题】:StreamReader scoping in exception thrown scenario异常抛出场景中的 StreamReader 范围
【发布时间】:2011-08-24 15:38:38
【问题描述】:

在下面的子程序中,抛出异常时StreamReader会正确关闭吗?还是我自己做了一些事情来确保这一点?

Sub mySub()
   Dim sr As StreamReader = File.OpenText("someFilename")
   Dim line As String = sr.ReadLine()
   While Not (line Is Nothing)
      ' Some logic here

      If someCondition Then
         Throw New Exception("someExplanation")
      End If

      line = sr.ReadLine()
   End While
End Sub

【问题讨论】:

    标签: vb.net exception streamreader


    【解决方案1】:

    您应该将 StreamReader 变量包装在 using 语句中。

    Using sr as StreamReader = File.OpenText("someFilename")
    ...
    End Using
    

    【讨论】:

    • 如果我从... 中抛出异常,StreamReader 和文件句柄等将被关闭?
    • 一旦执行离开 Using 块,它将自动在 StreamReader 上调用 .Dispose(),这会释放 StreamReader / 底层流使用的所有资源。
    • 王牌,谢谢。我想知道为什么在离开封闭函数范围时无论如何都不会发生这种情况?没有其他东西可以引用它。
    • @Tomalak,它最终会在垃圾收集器处理它时发生,但可能不会在您再次需要该文件之前发生。
    • @Hand-E-Food:好的,这是有道理的。干杯。
    【解决方案2】:

    在进程终止之前不会关闭流。即使是这样,您也应该关闭它。最好的方法是使用前面提到的“使用”方法。但它不会像编写它时那样导致数据丢失。在其他翻译中,您应该关闭 Stream,但它不是评论家。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2013-09-28
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多