如何确定 System.IO.IOException 的 HResult?

2024-02-19

System.Exception.HResult 属性受到保护。如何在不诉诸反射或其他丑陋黑客的情况下查看异常内部并获取 HResult?


情况是这样的:
我想编写一个备份工具,它可以打开并读取系统上的文件。 我使用 FileAccess.Read 和 FileShare.ReadWrite 打开文件,根据本指南 https://stackoverflow.com/questions/897796/how-do-i-open-an-already-opened-file-with-a-net-streamreader,因为我不关心文件在读取时是否打开用于写入。

在某些情况下,当我正在读取的文件被另一个应用程序打开时,System.IO.FileStream.Read() 方法会抛出 System.IO.IOException,“该进程无法访问该文件,因为另一个进程已锁定该文件的一部分”文件”。这是error 33 http://msdn.microsoft.com/en-us/library/ms681382.aspx,或者我认为 HResult 0x80070021。 [EDIT:我相信当另一个进程调用时可以返回这个锁定文件Ex http://msdn.microsoft.com/en-us/library/aa365203.aspx锁定文件内的字节范围。]

当我收到此错误时,我想暂停并重试。我认为这是在这里采取的适当行动。如果锁定过程快速释放字节范围锁定,那么我可以继续读取文件。

我怎样才能将这个原因的 IOException 与其他原因区分开来?我可以想到这些方法:

  • 私人反思 - 不想这样做。性能会发臭。
  • 调用 Exception.ToString() 并解析字符串。感觉很哈克。不适用于 i18n 版本。

我不喜欢这些选项。难道没有更好、更干净的方法吗?


我刚刚四处搜寻发现System.Runtime.InteropServices.Marshal.GetHRForException http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.gethrforexception.aspx。会返回像 0x80070021 这样的 uint 吗?


对于 .Net Framework 4.5 及更高版本,您可以使用Exception.HResult财产:

int hr = ex.HResult;

对于旧版本,您可以使用Marshal.GetHRForException http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.gethrforexception.aspx取回 HResult,但是这个有明显副作用,不推荐 https://blogs.msdn.microsoft.com/yizhang/2013/01/18/marshal-gethrforexception-does-more-than-just-get-hr-for-exception/:

int hr = Marshal.GetHRForException(ex);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定 System.IO.IOException 的 HResult? 的相关文章

随机推荐

  • MySQL 查询和数据透视表

    我的 MySQL 数据库具有以下列标题 month typeOfWork totalHours 我有兴趣根据工作类型和月份显示结果 例如 所有 typeOfWork 条目将显示在左侧第一列中 并且每个字段将汇总每列指定月份中的特定 type
  • 在 Swift 中使用 Parse 获取 Twitter 个人资料图像

    在 Swift 中没有找到任何关于此的信息 所以我问 如何使用 Parse 从 Twitter 获取已登录用户的个人资料图片 用户已经通过解析内部登录 signupController 登录 var username PFUser curr
  • Dask 数据帧并行任务

    我想从数据帧创建功能 附加列 并且我有以下许多功能的结构 遵循本文档https docs dask org en stable delayed best practices html https docs dask org en stabl
  • 有什么办法可以逃避弹性beanstalk环境变量中的“非法字符”?

    我正在尝试为 Rails 应用程序创建一个新的弹性 beanstalk 环境 并且将现有 RDS 实例的详细信息作为环境变量传递 该 RDS 实例是根据前一个 Elastic beanstalk 实例的快照创建的 但是该实例是由 Elast
  • NightwatchJS .elements 返回字符串而不是对象

    我正在使用 nightwatch 并尝试迭代元素列表 但是 当我没有获取对象或元素时 但我得到了一个字符串数组 CODE browser elements css selector ele function r browser perfor
  • Spring Repository 接口中使用 sort() 和 limit() 进行查询

    我是 Spring Data with MongoDB 的新手 希望在我的 MongoRepository 扩展接口中拥有一个自动生成的查询方法 该方法需要过滤 排序和限制 查询如下所示 created is the field I nee
  • 在 QT 中将配置设置保存到 XML 文件吗?

    我想将配置设置保存到 QT 中的 XML 文件并从那里读取它 在 QT 中执行此操作的最佳方法是什么 任何样品 想法都受到高度赞赏 Thanks 您可以使用以下方式注册您的 XML 文件格式QSettings registerFormat
  • CakePHP:验证消息不显示

    我是 cakePHP 的新手 我按照一些教程制作了一个简单的表单 在这个 html 表单上我使用了验证 现在的问题是验证正在工作 但消息没有显示我希望它显示的内容 我尝试了下面的代码 Model public validate array
  • JS - 如何提交表单 onclick 并发送提交按钮

    我需要通过按钮提交表单 这超出了 JavaSript 表单的范围
  • 使用向上/向下滑动动画显示和隐藏视图

    我有一个LinearLayout我想用一个来显示或隐藏Animation每当我改变布局的可见性时 它就会向上或向下推动布局 我见过一些样品 但没有一个适合我的需要 我已经为动画创建了两个 xml 文件 但当我更改动画的可见性时 我不知道如何
  • addClass 不适用于 iPhone Chrome

    changing navbar background color by scrolling window scroll function if this scrollTop gt 20 tab nav addClass tab scroll
  • 使用 imshow 绘制时间序列

    我试图使标题尽可能清晰 尽管我不确定它是否完全清晰 我有三个系列的数据 随时间变化的事件数量 我想做一个代表三个时间序列的子图 你会发现附件是我能想到的最好的 上一个时间序列明显较短 这就是为什么它在此处不可见的原因 我还添加了相应的代码
  • 通过单击图像显示/隐藏 div

    我希望能够单击图像来显示 隐藏 div 带有文本 我已经对一张图像进行了此操作 但我有多个图像需要切换文本 JavaScript 代码 document ready function slidingDiv hide show hide sh
  • 比较 Realm 对象列表

    我想比较 2 个 Realm 对象列表 看看它们是否相同 这是该物体的样子 class ScheduleRealm Object let scheduleList List
  • 使用 JavaScript 在画布中获取鼠标位置

    我正在研究 jquery 和 html5 canvas 我想做的只是一个简单的 html5 绘图示例 当鼠标移动时 我在鼠标下方绘制红色方块 我的代码很简单 但在获取画布内的鼠标光标位置时遇到问题 现在 我正在使用 x event offs
  • 使用 EPPLUS 缓慢加载 .CSV 文件

    我有大量 csv 文件 需要在应用一些格式后将其转换为 xlsx 包含大约 20 000 行和 7 列的文件需要 12 分钟才能转换 如果文件包含超过 100 000 个 则运行时间 gt 1 小时 不幸的是 这对我来说是不能接受的 代码片
  • 不明白为什么我在 Mongoose Pre save hook 上收到错误警告

    我想使用预保存挂钩对我的密码进行哈希处理 我的密码得到了很好的哈希处理 但为什么我在预保存挂钩的 保存 方法名称上收到错误警告 错误警告 没有重载与此调用匹配 最后一次超载出现以下错误 类型 save 的参数不可分配给类型 RegExp 的
  • 无法使用 Firebase 和 Stripe 正确解析 Json

    错误是 线程 7 无法解析遵循协议 STPCustomerEphemeralKeyProvider 的临时密钥响应 请确保您的后端将临时密钥的未修改 JSON 发送到您的应用程序 有关详细信息 请参阅https stripe com doc
  • Corona SDK 跨设备屏幕分辨率

    这将是那些寻找可能不存在的答案的尴尬问题之一 但这里是 我一直在使用 Corona 开发一些简单的游戏 虽然该功能似乎在我测试过的大多数物理设备上运行得很好 但一个主要问题是布局 我知道您无法真正完美地为每个设备构建 但我想知道是否有一种通
  • 如何确定 System.IO.IOException 的 HResult?

    System Exception HResult 属性受到保护 如何在不诉诸反射或其他丑陋黑客的情况下查看异常内部并获取 HResult 情况是这样的 我想编写一个备份工具 它可以打开并读取系统上的文件 我使用 FileAccess Rea