【问题标题】:File remains locked despite unlocking尽管解锁,文件仍处于锁定状态
【发布时间】:2017-02-02 15:04:09
【问题描述】:

为什么我要删除此文件时收到 IOException?确定是我解锁了?显然另一个进程仍在使用该文件,尽管没有以其他方式触摸它。

using (var lockFile = new FileStream(lockFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
    try
    {
        var productCount = downloadStuff();
    }
    catch (Exception e)
    {

    }
    finally
    {
        lockFile.Unlock(0,lockFile.Length);
        File.Delete(lockFilePath);
    }

}

【问题讨论】:

  • 尝试在不处于Debug 模式下运行它。 Visual Studio 调试器的宿主进程有一个可怕的习惯,即即使在您的代码放开它之后,它也会挂在文件锁上。
  • @user1895086 那么我该如何调试它!并且只是尝试在调试器之外运行应用程序的调试版本,结果相同。
  • 您是否尝试在删除前关闭文件?
  • UnlockLockClose(和Dispose)与new FileStream(和File.Open)配对。
  • Unlock() 不会像您认为的那样做。你的using() { ... } 块锁定了文件,你可以在外面删除它。

标签: c# file file-locking


【解决方案1】:

我相信您的问题是由于您致电 File.Delete 时文件仍处于打开状态而引起的。
尝试将File.Delete 调用移出using 块:

using (var lockFile = new FileStream(lockFilePath, ...))
{
    ...
}
File.Delete(lockFilePath);

或者在File.Delete之前调用lockFile.Close

finally
{
    lockFile.Close();
    File.Delete(lockFilePath);
}

【讨论】:

  • 该死,我用手机写答案的时间太长了 :)。 +1
  • 关闭也会解锁吗?
  • @user3791372 :这就是关闭它的目的:)。 Close() 调用 Dispose(),就像 using
  • @user3791372 毫无疑问。
  • @stavm:“冲洗”?听起来有点意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
相关资源
最近更新 更多