IOException HResult可能的值

本文关键字:HResult IOException | 更新日期: 2023-09-27 18:21:20

我发现,有时在IO操作中,会抛出常见的IOException。我可以使用Marshal.GetHRForException(Exception e)方法(在此处找到)来确定特定的错误代码。之后,我想使用特定于应用程序的错误代码重新抛出一个异常,以便向用户提供一些错误提示。但我无法找到IOException的可能HResult值的列表。

还有一件事我一直认为,对于不同的HResult代码,根本原因可能是相同的-例如,0x8007052E0x80070569-都对应于Logon failure: unknown user name or bad password.

我尝试过搜索类似"IOException HResult values"的内容,但对于映射带有人类可读错误的IOException HResolt没有什么特别之处(比如这个或这个)。

我在这里也看到了这个问题,它非常相似,但仍然没有解决方案。

那么,关于IOException HResults值的文档在哪里?

IOException HResult可能的值

通过使用Marshal.GetHRForException(),您将Windows错误代码封装为HResult错误代码。对于IOException,它将始终是Windows错误号+0x8007000。"8"表示错误,"7"表示它来自Windows。您可以简单地使用& 0xffff来再次恢复原始错误代码。

将结果转换回十进制,您将有很多位置可以了解错误代码的含义。我个人一直使用WinError.h SDK头文件。根据VS的版本,大多数程序员会在C:''Program Files(x86)''Microsoft SDKs''Windows''v7.1A''Include目录中找到它。

您还有一个方便的实用程序,可以从Visual Studio命令提示符运行errlook.exe。将其添加到"工具"菜单中是使其随时可用的好方法。使用"工具+外部工具"、"添加"按钮、Title="错误查找"、"命令"=C:''Program Files(x86)''Microsoft Visual Studio 12.0''Common7''Tools''errlook.exe。根据需要调整路径以匹配VS版本。

您现在还会发现错误代码不相同。0x80070569&0xffff=0x569=1385。在WinError.h中搜索该错误代码会产生error_LOGON_TYPE_NOT_GRANTED,"登录失败:用户在此计算机上未被授予请求的登录类型"。

您可以获得的IOException错误类型无论如何都不受限制。Windows没有"异常规范",MSDN文档中只列出了特定winapi函数的最常见错误代码。很像.NET异常。许多IOException错误代码是由非Microsoft编写的驱动程序生成的,这是一个必要的错误。