File.Create从IIS锁定创建的文件

时间:2011-02-22 18:35:22

标签: asp.net iis io

我在IIS 7.5中运行的ASP.NET在本地文件系统上创建文件,然后在创建和删除之间执行某些逻辑后尝试删除。我遇到了一种情况,虽然删除失败的回复如“进程无法访问文件'C:... \上传\ 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吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

查看SysInternals Process Explorer,它可以让您准确了解此文件句柄的泄漏位置。