2011-02-22 72 views
0

我有一个运行在IIS 7.5中的ASP.NET,它在本地文件系统上创建文件,然后在创建和删除之间执行一些逻辑之后尝试删除。我遇到了一种情况,虽然在删除失败的情况下,响应如“进程无法访问文件'C:... \ Uploads \ c1fe593f-85de-4de1-b5d1-7239e1fc0648_Tulips.jpg'',因为它正在被使用由另一个进程'。“该文件似乎被IIS锁定,我无法删除它。下面是创建和delete一个代码示例:File.Create从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?我如何解决这个问题?

+0

原来我很笨。我忘了清理另外一个可以处理它的资源。我的错。 – 2011-02-23 22:41:54

回答

0

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

看看SysInternals Process Explorer,它可以让你知道这个文件句柄泄漏的确切位置。