如何处理特定的 IOException?
How can I handle a specific IOException?
我有一个使用 Socket 和 SerialPort 的代码,我想处理特定的异常。使用 Socket 我没有问题,因为 SocketException class 有 SocketErrorCode 并且我在开关中使用它来处理错误,但我没有找到与 IOException class.[= 类似的东西11=]
是否有 IOException class 的异常列表?
try
{
strTemp = "Command";
fnWriteCommand(strTemp, communicationInterface);
index = 10;
}
catch (SocketException socketEx)
{
switch (socketEx.SocketErrorCode)
{
case SocketError.ConnectionRefused:
case SocketError.ConnectionAborted:
case SocketError.ConnectionReset:
case SocketError.NotConnected:
index = 0; // Restart sequence
break;
case SocketError.TimedOut:
index = 10; // Retry
break;
}
}
catch (IOException IOEx)
{
// Handle specific exceptions
}
IOException
class 有几个派生的异常被抛出,提供了关于遇到的 IO 错误的更多信息。您可以单独捕获它们:
try { // Some code }
catch (System.IO.DirectoryNotFoundException) { }
catch (System.IO.DriveNotFoundException) { }
catch (System.IO.EndOfStreamException) { }
catch (System.IO.FileLoadException) { }
catch (System.IO.FileNotFoundException) { }
catch (System.IO.InternalBufferOverflowException) { }
catch (System.IO.InvalidDataException) { }
catch (System.IO.PathTooLongException) { }
catch (System.IO.IOException) { // Something else happened. Check InnerException details }
System.IO.Ports.SerialPort
class 使用操作系统的低级端口通信功能的内部包装,System.IO.Ports.InternalResources。
此模块处理 I/O 错误并将它们转换为托管 System.IO.IOException
。不幸的是,其中一些不使用数字错误代码,仅使用需要翻译的文本(资源标识符和 en-us 翻译):
IO_PortNotFound "The specified port does not exist."
IO_PortNotFoundFileName "The port '{0}' does not exist."
IO_SharingViolation_NoFileName "The process cannot access the port because it is being used by another process."
IO_SharingViolation_File "The process cannot access the port '{0}' because it is being used by another process."
所有未映射到这四个异常字符串中的任何一个的 Winapi HREsult 代码都使用 HResult
和 Windows [=30= 的文本转换为 IOException
] 通过 FormatMessage
API.
提供
在IOException
的众多子class中,只有EndOfStreamException
用在了串口上下文中,可以专门抓到,或者这样查询:
if(IOEx is EndOfStreamException)
{
var eosex = IOEx as EndOfStreamException;
...
}
我有一个使用 Socket 和 SerialPort 的代码,我想处理特定的异常。使用 Socket 我没有问题,因为 SocketException class 有 SocketErrorCode 并且我在开关中使用它来处理错误,但我没有找到与 IOException class.[= 类似的东西11=]
是否有 IOException class 的异常列表?
try
{
strTemp = "Command";
fnWriteCommand(strTemp, communicationInterface);
index = 10;
}
catch (SocketException socketEx)
{
switch (socketEx.SocketErrorCode)
{
case SocketError.ConnectionRefused:
case SocketError.ConnectionAborted:
case SocketError.ConnectionReset:
case SocketError.NotConnected:
index = 0; // Restart sequence
break;
case SocketError.TimedOut:
index = 10; // Retry
break;
}
}
catch (IOException IOEx)
{
// Handle specific exceptions
}
IOException
class 有几个派生的异常被抛出,提供了关于遇到的 IO 错误的更多信息。您可以单独捕获它们:
try { // Some code }
catch (System.IO.DirectoryNotFoundException) { }
catch (System.IO.DriveNotFoundException) { }
catch (System.IO.EndOfStreamException) { }
catch (System.IO.FileLoadException) { }
catch (System.IO.FileNotFoundException) { }
catch (System.IO.InternalBufferOverflowException) { }
catch (System.IO.InvalidDataException) { }
catch (System.IO.PathTooLongException) { }
catch (System.IO.IOException) { // Something else happened. Check InnerException details }
System.IO.Ports.SerialPort
class 使用操作系统的低级端口通信功能的内部包装,System.IO.Ports.InternalResources。
此模块处理 I/O 错误并将它们转换为托管 System.IO.IOException
。不幸的是,其中一些不使用数字错误代码,仅使用需要翻译的文本(资源标识符和 en-us 翻译):
IO_PortNotFound "The specified port does not exist."
IO_PortNotFoundFileName "The port '{0}' does not exist."
IO_SharingViolation_NoFileName "The process cannot access the port because it is being used by another process."
IO_SharingViolation_File "The process cannot access the port '{0}' because it is being used by another process."
所有未映射到这四个异常字符串中的任何一个的 Winapi HREsult 代码都使用 HResult
和 Windows [=30= 的文本转换为 IOException
] 通过 FormatMessage
API.
在IOException
的众多子class中,只有EndOfStreamException
用在了串口上下文中,可以专门抓到,或者这样查询:
if(IOEx is EndOfStreamException)
{
var eosex = IOEx as EndOfStreamException;
...
}