如何:在 Visual Basic 中实现 I/O Try...Catch 块

更新:2007 年 11 月

下面的代码示例实现了处理 ExceptionIOException 以及所有派生自 IOException 的异常的 Try...Catch 块。

示例

此示例从最具体的异常到最抽象的异常,依次测试每个异常。

此代码示例也可用作 IntelliSense 代码段。在代码段选择器中,它位于“文件系统 -- 处理驱动器、文件夹和文件”。有关更多信息,请参见如何:在代码中插入代码段 (Visual Basic)

Try
    ' Add code for your I/O task here. 
Catch dirNotFound As System.IO.DirectoryNotFoundException
    ' Code to handle DirectoryNotFoundException.
Catch fileNotFound As System.IO.FileNotFoundException
    ' Code to handle FileNotFoundException.
Catch pathTooLong As System.IO.PathTooLongException
    ' Code to handle PathTooLongException.
Catch ioEx As System.IO.IOException
    ' Code to handle IOException.
Catch security As System.Security.SecurityException
    ' Code to handle SecurityException.
Catch ex As Exception
    ' Rethrow exception if anything else has occurred.
    Throw ex
Finally
    ' Dispose of any resources you used or opened in the Try block. 
End Try

编译代码

将要执行的代码添加到 Try 块中。

可靠编程

将此代码块用作起点,以便在 Try...Catch 语句中包含数据操作。此 Try...Catch 块旨在捕获并再次引发所有异常。对于您的项目,这可能不是正确的选择。有关异常处理选项的讨论,请参见 使用 IntelliSense 代码段的最佳做法

您可以通过使用 Windows 窗体控件(如限制供用户选择的有效文件名的 OpenFileDialog 组件(Windows 窗体) 组件控件和 SaveFileDialog 组件(Windows 窗体) 组件控件)减少引发异常的可能性。FileInfo.Exists 属性可以在您试图打开某个文件时检查该文件是否存在。但是,使用这些控件和类并不是万无一失的。用户选择文件到代码运行期间,文件系统可能发生更改。因此在处理文件时,几乎总是需要异常处理。

安全性

对于许多文件任务,程序集需要由 FileIOPermission 类授予的特权级别。如果在部分信任的上下文中运行,则代码可能会因特权不足而引发一个异常。有关更多信息,请参见代码访问安全性基础知识。如果文件存在,用户还需要有对该文件的访问权限。有关更多信息,请参见访问控制列表 (ACL)

不要根据文件扩展名来判断文件的内容。例如,文件 Form1.vb 可能不是 Visual Basic 源文件。

请参见

任务

如何:在 Visual Basic 中筛选 Catch 块中的错误

如何:检查异常的内部异常

概念

使用 IntelliSense 代码段的最佳做法

Visual Basic 的结构化异常处理概述

选择何时使用结构化异常处理和非结构化异常处理

参考

Try...Catch...Finally 语句 (Visual Basic)

其他资源

异常处理任务