如何:在 Visual Basic 中实现 I/O Try...Catch 块
下面的代码示例实现一个 Try...Catch 块,该块处理 Exception、IOException 以及从 IOException 派生的所有异常。
示例
此示例从最具体的异常到最抽象的异常,依次测试每个异常。
此代码示例也可用作 IntelliSense 代码段。 在代码段选择器中,它位于**“文件系统 -- 处理驱动器、文件夹和文件”**。 有关更多信息,请参见如何:插入 IntelliSense 代码段。
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 块中的错误
参考
Try...Catch...Finally 语句 (Visual Basic)
概念
选择何时使用结构化异常处理和非结构化异常处理 (Visual Basic)