2011-08-24 32 views
1

在下面的子例程中,抛出异常时StreamReader会被正确关闭吗?或者我有自己的事情来确保这一点?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 

回答

3

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

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

如果我在'...'内抛出一个异常,'StreamReader'和文件句柄等会关闭吗? –

+0

一旦执行离开Using块,StreamReader就会自动调用.Dispose(),它释放StreamReader /底层流使用的所有资源。 – JamesMLV

+0

王牌,谢谢。我想知道为什么在离开函数作用域时不会出现这种情况?没有别的东西可以引用它。 –

1

在流程终止之前流将不会关闭。即使它是你应该关闭它。最好的方法是使用前面提到的“使用”方法。但是与编写它不同,它不会导致数据丢失。在其他翻译,你应该关闭流,但它不是批评。

相关问题