如何确定是否由于共享冲突而引发 IOException?

2023-11-25

我有一个 C# 应用程序,我想将文件复制到新位置。有时我需要覆盖现有文件。 当发生这种情况时,我收到 System.IO.IOException。我想从共享冲突中恢复,但如何确定返回 IOException 是因为目标文件正在使用而不是其他原因?我可以查找“该进程无法访问该文件,因为它正在被另一个进程使用。”消息...但我不喜欢这个主意。


这是我想出的解决方案。

private void RobustMoveFile( System.IO.DirectoryInfo destinationDirectory, System.IO.FileInfo sourceFile, Boolean retryMove )
                {
                    try
                    {
                        string DestinationFile = Path.Combine( destinationDirectory.FullName, sourceFile.Name );
                        if ( File.Exists( DestinationFile ) )
                            sourceFile.Replace( DestinationFile, DestinationFile + "Back", true );
                        else
                        {
                            sourceFile.CopyTo( DestinationFile, true );
                            sourceFile.Delete();
                        }
                    }
                    catch ( System.IO.IOException IOEx )
                    {
                        int HResult = System.Runtime.InteropServices.Marshal.GetHRForException( IOEx );        
                        const int SharingViolation = 32;
                        if ( ( HResult & 0xFFFF ) == SharingViolation && retryMove )
                            RobustMoveFile( destinationDirectory, sourceFile, false );
                        throw;
                    }
                }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定是否由于共享冲突而引发 IOException? 的相关文章

随机推荐

  • 如何在 php 中将奇怪的强/粗体 Unicode 转换为非粗体 UTF-8 字符?

    我正在尝试使用 twitter api 在我的数据库中存储一条推文 但我得到了这种 stage 字符 它似乎是 自然 粗体字符 普通字符 azertyuio 奇怪的字符 如果我在我的 netbeans 编辑器中粘贴最强的字符 我会得到类似方
  • 通过 VBScript 了解用户是否具有管理权限的最佳方法

    我需要检查执行脚本的用户是否具有计算机的管理权限 我已经指定了执行脚本的用户 因为该脚本可以使用除使用类似于 Runas 的用户登录之外的用户执行 Javier 这两种解决方案都可以在安装了英文版 Windows 的 PC 上运行 但如果安
  • 获取 contenteditable div 中的插入符索引(包括标签)

    我有一个contentEditable div其中我有多个标签 br b u i 和文本 我需要获取相对于 div 的插入符索引位置 包括所有标签 例如 div abc b def br ghi b jkl div 如果光标位于g and
  • 调用派生类的构造函数在基类的构造函数之前执行

    好吧 最初我在每个派生类中都有几个具有不同值的常量 例如 MAX SPEED 这个想法是在基类的某些方法中使用这些值 就在那时 我意识到我无法使用常量来做到这一点 因此我创建了只读属性 我需要一种方法在实例化时将这些值分配给私有字段 最好是
  • 为什么法线使用相机空间而不是模型空间?

    我正在学习 OpenGL 图形 并且正在学习阴影 我正在阅读的教程告诉我将法线和光矢量转换为相机空间 为什么是这样 为什么不能将坐标保留在模型空间中 随之而来的问题是如何处理模型转换 我无法找到明确的答案 我目前有这个代码 vec3 nor
  • 您可以在 irb 会话中自动在每个命令中“要求”ruby 文件吗?

    我当前正在编辑一个文件 并使用 irb 来测试 api gt require file rb gt o Object new gt o method 然后我希望能够编辑 file rb 并能够立即看到更改 示例 假设当我第一次需要 file
  • 包管理器名称未找到异常

    我是安卓编程新手 我使用 Eclipse 以及 MainActivity java 和 ClassFragment java 文件创建了一个应用程序 ClassFragment 是一个片段 我正在使用新更新的 appcompat 库 我只想
  • GLSL:关于相干限定符

    我没明白如何coherent限定符和原子操作一起工作 我使用以下代码在同一 SSBO 位置上执行一些累积操作 uint prevValue newValue uint readValue ssbo index do prevValue re
  • Blazor:没有会话/JWT 令牌时重定向到登录页面?

    我正在尝试在 Blazor 中创建一个新应用程序并正在进行身份验证 我正在使用存储在本地存储中的 JWT 令牌 当应用程序加载时 我需要检查存储中是否有令牌 如果是这样 请将其添加到所有 API 请求的 HTTP 标头中 如果不是 则在页面
  • 在 Swift 中旋转 UIImage

    我正在使用 Xcode 6 0 1 和 Swift 我有一个 UIImage 我想使用旧图像作为源来制作另一个图像 新图像以某种方式旋转 比如说垂直翻转 这个问题已经有答案了几个月前 然而 即使情况相同 该解决方案对我不起作用 当我有 va
  • Application.OnKey 无法正确重置

    I am trying to help another user in this forum reference The goal is to use the Enter key on the numeric keypad to trigg
  • Python、Matplotlib、绘制多线(数组)和动画

    我开始使用 Python 和 OOP 编程 但我在 Fortran 90 95 和 Matlab 编程方面拥有丰富的经验 我正在 tkinter 环境上使用动画开发一个小工具 该工具的目标是对多行进行动画处理 数组而不是数据向量 下面是我的
  • 如何读取 emscripten 编译库中用户指定的文件?

    我目前正在开发一个带有 emscripten 编译支持的 C 文件解析库 它从用户处获取文件路径 在其中读取二进制文件并解析它 据我所知 emscripten 不支持直接加载文件 而是使用虚拟文件系统 有没有办法将给定路径上的文件加载到虚拟
  • 如何使用 swift 隐藏 QLPreviewController 中的共享按钮?

    我使用下面的代码来使用 QLPreviewcontroller 在我的应用程序中显示一些文档 let ql QLPreviewController ql dataSource self ql navigationItem rightBarB
  • 如何使用配置文件提供程序插件从 Jenkins 管道内的配置文件读取属性

    我想用一个简单的属性配置文件参数化我的 Jenkins 管道 skip tests true 我已将其添加到 Jenkins 配置文件管理中 在我的管道中 我导入此文件并尝试使用 Jenkins 管道配置文件插件读取它 node my sw
  • 混合模式程序集未加载本机 C++ pdb 的符号

    我正在使用 C CLI 中的混合模式程序集 在混合模式组装中成功时 所有托管模式组装的 pdb 都会被加载 但即使本机 pdb 的信息显示在 模块 窗格中 即在 VS 调试 gt Windows gt 模块中 也不会加载本机 dll 和 p
  • 计算Javascript中两个日期之间的工作日(节假日除外)

    我有一个 javascript 函数 它计算两个日期之间的工作日 它可以工作 但问题是它不考虑假期 如何修改此函数 例如通过在异常数组中添加假期 在互联网上搜索了这个问题 但没有找到有关假期例外的信息 例如假期数组 var holidays
  • 附加模板字符串

    是否可以将模板字符串附加到 div 中 我正在尝试优化我的代码 目前我的代码必须创建元素 添加类 添加文本节点 然后将所有内容附加在一起 我想知道是否可以只创建一个模板字符串然后附加它 以提高效率 我不想用innerHTML 擦除当前div
  • 默认参数为泛型类型

    我有用 Swift 编写的协议及其实现 protocol P struct A P 协议用作某些功能的泛型类型 func foo
  • 如何确定是否由于共享冲突而引发 IOException?

    我有一个 C 应用程序 我想将文件复制到新位置 有时我需要覆盖现有文件 当发生这种情况时 我收到 System IO IOException 我想从共享冲突中恢复 但如何确定返回 IOException 是因为目标文件正在使用而不是其他原因