如何检查文件是否正在使用?

2023-12-14

在尝试打开文件进行读取之前,有什么方法可以先测试文件是否正在使用?例如,如果文件仍在写入或被视为正在使用,则此代码块将引发异常:

try
{
    FileStream stream = new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.Read);
}
catch (IOException ex)
{
    // ex.Message == "The process cannot access the file 'XYZ' because it is being used by another process."
}

我环顾四周,我能找到的最好的办法就是执行某种带有 try catch 的轮询,这感觉so哈克。我希望有一些东西System.IO.FileInfo但没有。

有更好的方法吗?


“您可以直接通过 P/Invoke 层调用 LockFile API 函数。您可以使用 FileStream 上的 SafeFileHandle 属性返回的句柄。 直接调用 API 将允许您检查错误条件的返回值,而不是诉诸捕获异常。”

"try/catch 块是正确的解决方案(尽管你想捕获 IOException,而不是所有异常)。您无法正确同步,因为测试锁+获取锁不是原子操作。”

"请记住,文件系统是易失性的:仅仅因为您的文件在一次操作中处于一种状态并不意味着它在下一次操作中将处于相同状态。您必须能够处理文件系统中的异常。”

使用 C# 是否可以测试文件是否持有锁

http://www.dotnet247.com/247reference/msgs/32/162678.aspx

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

如何检查文件是否正在使用? 的相关文章

  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 为什么 gcc 抱怨“错误:模板参数 '0' 的类型 'intT' 取决于模板参数”?

    我的编译器是gcc 4 9 0 以下代码无法编译 template
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 从 Excel 应用程序对象中查找位数(32 位/64 位)?

    是否可以从 Microsoft Office Interop Excel ApplicationClass 确定 Excel 是以 32 位还是 64 位运行 Edit该解决方案应该适用于 Excel 2010 和 Excel 2007 此
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 无法连接到 StreamSocketListener

    我正在尝试连接到 Windows 10 应用程序中的 StreamSocketListener 如果客户端套接字位于同一应用程序内 则此方法有效 但如果我尝试从另一个应用程序 例如 Putty 连接 它就不起作用 几秒钟后 腻子显示 网络错
  • 在java中使用super.paintComponent(g)或getGraphics()

    我对几件事有点困惑 示例代码 显示了我的问题 这是不可编译的 image private BufferedImage image private Graphics2D graphic private changeImage thread l
  • 有没有办法调用被重写的对象的基类方法? (C++)

    我知道有些语言允许这样做 在C 中可以吗 Yes include
  • 围绕角色旋转图像(JAVA)

    是的 我确实知道您可以使用 AffineTransformation 但是我希望我的剑图像围绕我制作的角色 图形中绘制的黑色块 明显旋转 360 度 而不是仅旋转一圈 基本上我想要一个像泰拉瑞亚那样的旋转系统 我知道如何获取角色的 x 和
  • 返回类型不同的方法的类型擦除

    我想知道是否存在某种形式的类型擦除来处理具有相同名称和参数但返回不同值的方法 如下面的示例所示 begin and end 我并不打算在任何地方实际使用它 我只是想知道它是否可能 如果可能的话 将如何完成 我所知道的类型擦除的唯一形式是拥有
  • HTML 和字符编码与 HTML 实体

    在编写 HTML 文档时 是否可以使用直接的特殊字符 例如大写字母 C 下面有一个变音符 作为常规文本 或使用HTML 实体名称这个角色的 Ccedil 我已经看到这两种方法都在实践中被使用 但肯定有一些规则来管理它的适当使用 以及一种方法
  • 如何获取 ul 标签中特定 li 的位置?

    我想要获得一号li我悬停在上面jQuery 这是我的代码 ul li li li li li li I want hover on this element li li li li ul 我希望当鼠标悬停在顶部代码中的某些元素上时获取所有元
  • 使用索引列表访问 pandas 数据框中的条目

    我面临的问题是 我只需要分布在不同行和列上的原始数据帧的子集 例如 My Original dataframe import pandas as pd dfTest pd DataFrame 1 2 3 4 5 6 7 8 9 Output
  • WSL - 当 linux 二进制文件在 Bash 中不可用时如何回退到 exe

    我需要做的是编写既可以在常规 Unix 系统上工作 也可以在 WSL 上工作的脚本 并在 linux 系统未安装 未安装在 PATH 中时尝试使用 EXE 版本的命令 这是我正在使用的当前代码 但我想知道是否可以使用更简单 更简洁的方法 i
  • cudaMemcpy 到主机来获取设备分配的内存仍然不可能吗?

    我有一个带有指针的数据结构 想想链表 在启动读取输入数据的内核之前无法确定其大小 因此 我在输入处理期间在设备上分配数据 但是 尝试将该数据复制回主机失败 据我所知 这是因为 CUDA 存在限制 不允许运行时 API 访问设备分配的内存 然
  • 当没有抛出异常时,C++ 异常会以哪些方式减慢代码速度?

    我读到 使用 C 异常进行异常处理 而不是检查返回值 会产生一些开销 我只是谈论没有抛出异常时产生的开销 我还假设您需要实现实际检查返回值并执行适当操作的代码 无论什么都相当于 catch 块将执行的操作 而且 将抛出内部有 45 个状态变
  • LINQ - 嵌套查询

    我有一个 SQL 语句 正在尝试将其转换为 LINQ 查询 我需要这样做 因为我无法编辑我的数据库 无论如何 我有一个如下所示的 SQL 语句 SELECT CustomerID FirstName LastName Gender Birt
  • 将经度和纬度与 Intent 传递给另一个类

    我试图将纬度和经度从 MainActivity 中的 onLocationChanged 传递到另一个包com route provider classDataPrivider但我收到此错误 我该怎么做 我如何在 DataProvider
  • Res.download() 使用 html 表单提交,但不使用 Axios post 调用

    我正在编写一个小型应用程序 它将来自 React 应用程序的信息提交到 Express 服务器的 download API 然后将新文件写入本地文件系统 并使用 Express res download 在客户端下载新创建的文件 在 fs
  • Android 上的 Google 通讯录 api

    我已经这样做好几天了 我很困惑 我在很多地方读到谷歌提供的java客户端 无法在android上工作 但事实并非如此 有人能指出我正确的方向吗 public void onCreate Bundle savedInstanceState s
  • Python 中的单引号与双引号[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • IExtenderProvider 根据对象类型仅添加一些属性

    我遇到了一个问题 我不知道这是否确实可行 如果有一种 hacky 方式 我全力以赴 但我还没有找到 我有一个IExtenderProvider我用来拥有自己的组件UITypeEditor对于第三方控件的某些属性 由于显而易见的原因 我无法更
  • 我应该如何对多线程代码进行单元测试?

    到目前为止 我已经避免了测试多线程代码的噩梦 因为它看起来像是一个雷区 我想问人们如何测试依赖线程成功执行的代码 或者人们如何测试仅在两个线程以给定方式交互时才出现的此类问题 对于当今的程序员来说 这似乎是一个非常关键的问题 恕我直言 汇集
  • 为什么 macOS Visual Studio Code 使用错误的 Python 解释器?

    我在 macOS Sierra 10 12 6 上运行 VS Code 1 33 1 当我运行如下所示的简单 Python 程序时 VS Code 使用 Mac 上安装的 Python 2 7 而不是我使用 Homebrew 安装的 Pyt
  • 如何检查文件是否正在使用?

    在尝试打开文件进行读取之前 有什么方法可以先测试文件是否正在使用 例如 如果文件仍在写入或被视为正在使用 则此代码块将引发异常 try FileStream stream new FileStream fullPath FileMode O