【问题标题】:In C# Does using File.OpenRead() needs to be closed?在 C# 中使用 File.OpenRead() 是否需要关闭?
【发布时间】:2020-06-16 02:27:26
【问题描述】:

我没有找到关于https://docs.microsoft.com/en-us/dotnet/api/system.io.file.openread?view=netcore-3.1的信息

我正在检查文件是否存在,以便可以使用。我稍后会再次打开该文件。我想知道在检查后关闭它是否更好。

我需要在 File.OpenRead() 之后关闭文件吗?

bool DoesFileOpensAndRead(string path)
{
    try
    {
        using (File.OpenRead(path))
        {
            return true;
        }
    }
    catch (Exception)
    {
        return false;
    }
}

【问题讨论】:

  • 问题:你知道using 块的作用吗?
  • 可能没有!我在想是使用 System.IO 的一部分;
  • @AlanMattano - 阅读the docsusing 块与 System.IO 没有任何关系。
  • “我稍后会再次打开文件” - 你需要意识到你的代码在过去中建立的关于文件的任何内容都可能与你也许能够在未来做到。该文件可能已被删除、覆盖、更改权限等。您无法预先检查有关文件的任何内容,并仅根据这些预先检查编写正确的代码

标签: c#


【解决方案1】:

由于您通过using 语句使用IDisposable 接口,因此您无需调用CloseDispose 将为您完成。

【讨论】:

    【解决方案2】:

    您正在使用的 Using 语句将自动处理它

    阅读https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement了解更多信息

    【讨论】:

      【解决方案3】:

      您不需要关闭它 - 它会在某个时候自动关闭。

      但是:如果你真的想释放你创建的文件锁而不等待下一次计算机重启(或者,技术上更正确:直到有人关闭程序并且操作系统释放文件锁)那么是的,你应该删除它。不过,这不是“需要”(就像将汽车锁在停车位不是“需要”一样——您可能会在某个时候被抢劫,但您不需要锁车)。

      现在,您的代码示例更有趣 - 它不起作用。期间。

      您的 File.OpenRead 在函数结束时自动 DISPOSED。这就是 using 语句的作用,而 using 也在内部关闭文件。我只是不确定这是什么意思,因为您实际上并没有对文件句柄做任何事情。你最好不要打开阅读但是-RTFM。

      我正在检查文件是否存在以便可以使用。

      啊,是的。为什么不使用这样做的方法呢?

      https://docs.microsoft.com/en-us/dotnet/api/system.io.file.exists?view=netcore-3.1

      File.Exists 是相同的,特别是因为“尽快打开”并不能保证文件

      • 你用的时候还在那里
      • 使用时可以打开。

      Open 确实做了一些额外的检查(你真的可以从权限中读取它吗?),但是

      • 无法保证这些权限在测试时已到位(注意您所说的“很快”,而不是“立即”
      • 在您打开之前,条件可能会发生变化。

      【讨论】:

        猜你喜欢
        • 2010-09-30
        • 2017-07-09
        • 2018-07-15
        • 1970-01-01
        • 2016-11-20
        • 1970-01-01
        • 2021-02-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多