我怎样才能检查是否IOException
是“磁盘空间不足”异常类型吗?
目前,我检查该消息是否与“磁盘空间不足”之类的内容匹配,但我知道如果操作系统语言不是英语,这将不起作用。
您需要检查HResult
并测试ERROR_DISK_FULL(0x70) and ERROR_HANDLE_DISK_FULL(0x27), which 可以转换为HResults by OR与0x80070000.
对于 .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,但是这个有明显副作用,不推荐:
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 文档:
请注意,获取HRForException方法设置错误信息的
当前线程。这可能会导致诸如以下方法的意外结果为 HR 抛出异常默认使用的方法错误信息的
当前线程(如果已设置)。
也可以看看如何确定 System.IO.IOException 的 HResult?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)