我发现,有时在IO操作中会抛出常见的IOException。我可以使用Marshal.GetHRForException(例外e)方法(发现这里)来确定特定的错误代码。之后,我想重新抛出一个异常,使用我的应用程序特定的错误代码,以便给用户一些提示。但是,我无法找到可能的HResult值列表,用于IOException。
还有一件事是,对于不同的HResult代码,根本原因可能是相同的,例如,0x8007052E和0x80070569都对应于Logon failure: unknown user name or bad password.。
我尝试过搜索类似于"IOException HResult values“的内容,但是对于将IOException HResult映射为人类可读的错误(比如这或这),没有什么特别的。
我在这里也看到了问题,它非常相似,但仍然没有解决方案。
那么,关于IOException HResults值的文档在哪里呢?
发布于 2014-09-09 08:57:15
通过使用Marshal.GetHRForException(),您可以将HResult错误代码包装为HResult错误代码。对于一个IOException,它将始终是Windows错误号+ 0x80070000。"8“表示错误,"7”表示它来自Windows。您可以简单地使用& 0xffff再次恢复原始错误代码。
将结果转换回十进制,您将有很多地方来了解错误代码的含义。我个人总是使用WinError.hSDK头文件。取决于您的VS版本,大多数程序员会在C:\ programmers (x86)\Microsoft \Windows\v7.1A\Include目录中找到它。
您还可以使用方便的实用工具,从Visual命令提示符运行errlook.exe。让它随时可用的一个好方法是将它添加到“工具”菜单中。使用工具+外部工具,添加按钮,标题=“错误查找”,“命令”= C:\Program (x86)\Microsoft 12.0\Common7\Tools\errlook.exe。根据需要调整路径以匹配VS版本。
您现在还会发现错误代码并不相同。0x80070569和0xffff = 0x569 = 1385。在WinError.h中搜索该错误代码将生成ERROR_LOGON_TYPE_NOT_GRANTED,“登录失败:用户尚未在此计算机上获得请求的登录类型”。
您可以获得的IOException错误类型无论如何都不受限制。Windows没有“异常规范”,仅在MSDN文档中列出了用于特定winapi函数的最常见错误代码。非常类似于.NET异常。许多IOException错误代码是由微软没有编写的驱动程序生成的,这是一个必要的缺点。
https://stackoverflow.com/questions/25738283
复制相似问题