【问题标题】:Will calling a File.Exist put a lock on a file?调用 File.Exist 会锁定文件吗?
【发布时间】:2009-02-17 17:21:57
【问题描述】:

如果我试图删除一个文件,但同时另一个进程正在对同一个文件执行 File.Exists(...),这是否会锁定该文件并导致我的进程失败?

【问题讨论】:

    标签: c# .net file-io locking


    【解决方案1】:

    不,File.Exist() 仅检查有问题的文件是否位于指定路径的文件系统上。它无论如何都不会访问文件数据或标题,因此它不会锁定文件。

    附带说明,即使打开文件也不一定会锁定它。这取决于您打开时选择的访问参数。

    【讨论】:

      【解决方案2】:

      不,File.Exist 不会锁定文件。不过,了解幕后发生的事情的一个好方法是查看source code

      下拉 .Net Framework 基类库的源代码,看看幕后发生了什么。特别是 System.IO.File 类,有一些非常有趣的默认选择,用于文件处理、锁定、释放等。在像您这样的实例中,查看幕后发生的事情的来源可以在如何处理方面产生重大影响你设计你的应用程序。

      根据链接:

      我可以使用共享源 CLI 做什么? Shared Source CLI 中有丰富的编程语言技术。它可能会引起广大受众的兴趣,包括:

      • 对 .NET Framework 内部工作原理感兴趣的开发人员可以探索 CLI 的这种实现,以了解垃圾收集的工作原理、JIT 编译和验证的处理方式、安全协议的实现以及框架和虚拟对象系统的组织。
      • 从事高级编译器技术工作的教师和研究人员。语言扩展、JIT 优化和现代垃圾收集的研究项目都以共享源 CLI 为基础。现代编译器课程可以基于 CLI 上实现的 C# 或 JScript 语言。
      • 开发自己的 CLI 实现的人们会发现 Shared Source CLI 是 ECMA 标准不可或缺的指南和辅助工具。

      【讨论】:

        【解决方案3】:

        这是对 anu 以及任何对文件进行类似操作的人的回答。

        使用 using 语句访问文件非常重要。这可确保您妥善处理对文件的引用。

        using (var fs = File.OpenRead(path)) {
            // Do something
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-19
          • 1970-01-01
          • 2023-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多