为什么 Excel.Interop 返回错误的 HResult 而不是 FILE_NOT_FOUND?
Why Excel.Interop is returning a wrong HResult instead of FILE_NOT_FOUND?
我一直在尝试使用以下代码加载 excel 文件 -
_workbook = await Task.Run(() =>
{
return _excelApp.Workbooks.Open(fileName);
}).ConfigureAwait(false);
如果我在 fileName
参数中提供了一个不存在的文件名,它会抛出一个带有以下错误代码的通用 COMException - 0x800a03ec
根据 Interop 文档,.NET 运行时应将 HResult 转换为特定异常 - https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.comexception?view=net-5.0
对于这个具体案例,我希望得到 FileNotFoundException
而不是通用的 COMException
。但由于 HResult 不是 FILE_NOT_FOUND
,它会抛出通用 COMException
。我的问题是为什么互操作返回错误的 HResult?我在这里做错了什么还是 Excel.Interop 中的错误?
不,文档没有说明这一点。它说:
The common language runtime transforms well-known HRESULTs to .NET Framework exceptions...
0x800a03ec 的任意 Excel HRESULT 不是“众所周知的”,因此 .NET 不知道如何处理它,因此它仍然是 COMException
。
我一直在尝试使用以下代码加载 excel 文件 -
_workbook = await Task.Run(() =>
{
return _excelApp.Workbooks.Open(fileName);
}).ConfigureAwait(false);
如果我在 fileName
参数中提供了一个不存在的文件名,它会抛出一个带有以下错误代码的通用 COMException - 0x800a03ec
根据 Interop 文档,.NET 运行时应将 HResult 转换为特定异常 - https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.comexception?view=net-5.0
对于这个具体案例,我希望得到 FileNotFoundException
而不是通用的 COMException
。但由于 HResult 不是 FILE_NOT_FOUND
,它会抛出通用 COMException
。我的问题是为什么互操作返回错误的 HResult?我在这里做错了什么还是 Excel.Interop 中的错误?
不,文档没有说明这一点。它说:
The common language runtime transforms well-known HRESULTs to .NET Framework exceptions...
0x800a03ec 的任意 Excel HRESULT 不是“众所周知的”,因此 .NET 不知道如何处理它,因此它仍然是 COMException
。