【问题标题】:File.Create from IIS locking the created FileFile.Create 从 IIS 锁定创建的文件
【发布时间】:2011-02-22 18:35:21
【问题描述】:

我有一个在 IIS 7.5 中运行的 ASP.NET,它在本地文件系统上创建文件,然后在创建和删除之间执行一些逻辑后尝试删除。我遇到了一种情况,尽管删除失败并出现诸如“进程无法访问文件'C:...\Uploads\c1fe593f-85de-4de1-b5d1-7239e1fc0648_Tulips.jpg'之类的响应,因为它正在被使用由另一个进程。'" 该文件似乎被 IIS 锁定,我无法删除它。下面是创建和删除的代码示例:

// File.WriteAllBytes(path, rawData); // this seems to leave the file open!
using (var file = File.Create(path))
{
    file.Write(rawData, 0, rawData.Length);
    file.Close(); // should close when it goes out of scope, but just to be safe
}

我需要将一些特殊选项传递给 File.Create 吗?我该如何解决这个问题?

【问题讨论】:

  • 原来我很笨。我忘了清理另一个可以处理它的资源。我的错。

标签: asp.net iis io


【解决方案1】:

File.WriteAllBytes(path, rawData); 应该可以正常工作,假设您传递的路径参数是唯一的,并且您没有并发请求一个写入和另一个尝试同时读取。为了确保这一点,如果这种情况可能发生,您可以使用ReaderWriterLockSlim 来同步访问。还要确保代码中没有可能泄漏文件句柄的其他部分。

看看SysInternals Process Explorer,它可以让你确切地知道这个文件句柄在哪里泄露。

【讨论】:

    猜你喜欢
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    相关资源
    最近更新 更多