如何以编程方式区分不同的 IOException?

2024-04-29

我正在对写入 Process 对象的 StandardInput 流的代码进行一些异常处理。 Process 有点像 unix head 命令;它只读取输入流的一部分。当进程终止时,写入线程会失败并显示:

IOException
The pipe has been ended. (Exception from HRESULT: 0x8007006D)

我想捕获这个异常并让它优雅地失败,因为这是预期的行为。然而,对我来说,如何将其与其他 IOException 区分开来并不明显。我可以使用消息,但据我了解,这些消息是本地化的,因此这可能不适用于所有平台。我也可以使用 HRESULT,但我找不到任何指定此 HRESULT 仅适用于此特定错误的文档。这样做的最佳方法是什么?


使用 Marshal.GetHRForException() 检测 IOException 的错误代码。一些示例代码可以帮助您对抗编译器:

using System;
using System.IO;
using System.Runtime.InteropServices;

class Program {
    static void Main(string[] args) {
        try {
            throw new IOException("test", unchecked((int)0x8007006d));
        }
        catch (IOException ex) {
            if (Marshal.GetHRForException(ex) != unchecked((int)0x8007006d)) throw;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式区分不同的 IOException? 的相关文章

随机推荐