c# - IOException HResult 可能的值

标签 c# .net error-handling ioexception hresult

我发现有时在 IO 操作中常见 IOException被抛出。我可以使用 Marshal.GetHRForException(Exception e)方法(找到 here )以确定具体的错误代码。之后,我想使用我的应用程序特定错误代码重新抛出异常,以便为用户提供一些提示,提示哪里出了问题。但是我无法找到 IOException 的可能 HResult 值列表。 .

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

我曾尝试搜索“IOException HResult 值”之类的内容,但对于将 IOException HResult 与人类可读错误(如 thisthis )进行映射没有什么特别之处。

我也看到了 question这里,很像,但是还是没有解决。

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

最佳答案

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

将结果转换回十进制,您将有很多地方可以找出错误代码的含义。我个人总是使用 WinError.h SDK 头文件。取决于您拥有的 VS 版本,大多数程序员会在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include 目录中找到它。

您还可以使用一个方便的实用程序,从 Visual Studio 命令提示符运行 errlook.exe。使其随时可用的一个好方法是将其添加到“工具”菜单。使用工具 + 外部工具,添加按钮,标题 =“错误查找”,“命令”= 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 没有“异常规范”,只有最常见的错误代码列在特定 winapi 函数的 MSDN 文档中。很像 .NET 异常。许多 IOException 错误代码是由并非由 Microsoft 编写的驱动程序生成的,这是一种必要的邪恶。

关于c# - IOException HResult 可能的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25738283/

相关文章:

c# - Google Drive SDK- 在文件夹中搜索文件

c# - 在托管 C++ 中使用函数指针调用 C# 委托(delegate)

作为参数传递给 onclick() 的 C# 变量未定义

.net - 团队成员之间的项目装配引用

c# - 面向对象的类建模 C#

c# - 使用扩展方法修改字符串实例变量

c# - 如何使用反射实例化对象构造函数中的属性

sql-server - 在 TFS 中映射本地目录时发生数据库错误(SQL 错误 18054)

Node.JS:当客户端请求中断时,postdata 会发生什么?

error-handling - Go 中的错误处理