如何判断IOException
是否为"磁盘空间不足"异常类型?
目前,我判断消息是否与"磁盘空间不足"之类的信息匹配,但我知道如果操作系统语言不是英语,这将不起作用.
如何判断IOException
是否为"磁盘空间不足"异常类型?
目前,我判断消息是否与"磁盘空间不足"之类的信息匹配,但我知道如果操作系统语言不是英语,这将不起作用.
您需要判断HResult
,并与can be converted to HResults
by OR
'ing with 0x80070000
的ERROR_DISK_FULL (0x70)和ERROR_HANDLE_DISK_FULL (0x27)进行对比测试.
对于.Net Framework 4.5和更高版本,可以使用Exception.HResult
属性:
static bool IsDiskFull(Exception ex)
{
const int HR_ERROR_HANDLE_DISK_FULL = unchecked((int)0x80070027);
const int HR_ERROR_DISK_FULL = unchecked((int)0x80070070);
return ex.HResult == HR_ERROR_HANDLE_DISK_FULL
|| ex.HResult == HR_ERROR_DISK_FULL;
}
对于较旧的版本,您可以使用Marshal.GetHRForException
来取回HResult,但是这个has significant side-effects and is not recommended:
static bool IsDiskFull(Exception ex)
{
const int ERROR_HANDLE_DISK_FULL = 0x27;
const int ERROR_DISK_FULL = 0x70;
int win32ErrorCode = Marshal.GetHRForException(ex) & 0xFFFF;
return win32ErrorCode == ERROR_HANDLE_DISK_FULL || win32ErrorCode == ERROR_DISK_FULL;
}
从MSDN文档中:
请注意,GetHRForException方法设置了
另见第How do I determine the HResult for a System.IO.IOException?页