如何检查 IOException 是否为 Not-Enough-Disk-Space-Exception 类型?

2023-12-14

我怎样才能检查是否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(使用前将#替换为@)

如何检查 IOException 是否为 Not-Enough-Disk-Space-Exception 类型? 的相关文章

随机推荐