了解VB.NET中的Open方法和Try块

时间:2015-06-23 15:53:49

标签: vb.net try-catch

我是第一次使用VB.NET,检查文件是否正在使用,但有些代码行我不能完全理解。

有人可以在评论中解释下面突出显示的两行代码吗?

Public Sub Main()
    IsFileInUse("C:\someFolder\file.pdf")
End Sub


Function IsFileInUse(filePath As String) As Boolean
    IsFileInUse = False
    If System.IO.File.Exists(filePath) Then
        Dim fileInfo As System.IO.FileInfo
        Dim stream As System.IO.FileStream
        fileInfo = New System.IO.FileInfo(filePath)
        Try
            ' Can someone explain this line of code?
            ' how does this determines where to go from here, Catch or Finally?
            stream = fileInfo.Open(System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite, System.IO.FileShare.None)
        Catch
            IsFileInUse = True
            MessageBox.Show("It looks like the file is opened")
        Finally
            If stream IsNot Nothing Then
                ' What is this closing?
                stream.Close()
            End If
        End Try
    Else 
        MessageBox.Show("File does NOT Exist")
    End If
End Function

3 个答案:

答案 0 :(得分:2)

  

这如何确定从这里开始的地方,Catch还是Finally?

查看documentation for FileInfo.Open。 “例外”部分显示了可能发生的所有可能异常。

如果抛出异常,将执行Catch块。

无论是否抛出异常,始终会执行Finally块。

  

这是什么结束?

它将释放流的资源,在这种情况下它将关闭文件。

答案 1 :(得分:1)

Try块运行代码。在Try块中,流用于打开文件并访问其内容。如果该代码因任何原因发生错误,它将抛出异常,然后将导致Catch块运行。无论是否抛出异常,代码的Finally块都将运行。在Finally块中,正在关闭File的流。

答案 2 :(得分:1)

代码正在确定文件当前是否正在使用"通过尝试打开具有读/写访问权限的文件的任何其他进程。无论文件的打开是否失败,它总是关闭文件流。它假设如果在该模式下打开文件因任何原因失败,那么它必须是因为它是"在使用"。这是一个不好的假设,也可能不是最好的方法来实现它,但是它的价值,它是它的所作所为。

Try / Catch块是VB.NET用于异常处理的首选语法(它取代了早于.NET的旧On Error语法)。当Try部分内的任何内容抛出异常时,执行将跳转到Catch部分。完成Catch部分的执行后,它会跳转到Finally部分。如果Try部分中没有任何内容引发异常,那么一旦完成,它也会跳转到Finally部分。基本上,最后一节中的所有内容都是"保证"执行,无论是否发生异常,而Catch部分中的代码仅在发生异常时执行。

换句话说,请考虑这个例子:

' Outputs "ABCE" (does not output "D")
Console.Write("A")
Try
    Console.Write("B")
    Console.Write("C")
Catch
    Console.Write("D")
Finally
Console.Write("E")

并将其与此示例进行比较:

' Outputs "ABDE" (does not output "C")
Console.Write("A")
Try
    Console.Write("B")
    Throw New Exception()
    Console.Write("C")
Catch
    Console.Write("D")
Finally
Console.Write("E")

有关该主题的更多信息,请参阅the MSDN article