2009-07-13 92 views
1

我正在使用asp.net C#。我的文件夹中保存图像文件,并删除它。当我delete一个我它给错误“该进程无法访问文件‘C:\的Inetpub \ wwwroot文件\管理\ TEMP \ visible_Jul-13-2009_035606.png’,因为它正另一个进程使用”删除图片

请帮助

代码:

fupAddImage.PostedFile.SaveAs(Server.MapPath("Temp") + @"\" + tempFilename); 
File.Delete(Server.MapPath("Temp") + @"\" + tempFilename); 
+0

添加特定的信息...你是如何保存的图像,然后你用了如何将其删除。如果你可以在这里发布代码的一部分。 – 2009-07-13 10:39:19

+0

fupAddImage.PostedFile.SaveAs(Server.MapPath(“Temp”)+ @“\”+ tempFilename); File.Delete(Server.MapPath(“Temp”)+ @“\”+ tempFilename); – Xyz 2009-07-13 10:57:41

回答

2

如何将图像保存?你是否确定要丢弃用于保存图像的所有图像和Stream对象?由于两个ImageStream(和StreamWriter)实现IDisposable你应该确保调用Dispose(或设置创建对象时使用的块),以便当图像已保存的文件被正确关闭。

更新:有一两件事你可以尝试是将图像数据保存自己,为了获得准确更有效地掌控它是如何做:

private static void SaveFile(Stream input, string fileName) 
{ 
    using (Stream output = File.OpenWrite(fileName)) 
    { 
     byte[] buffer = new byte[8192]; 
     int bytesRead; 
     do 
     { 
      bytesRead = input.Read(buffer, 0, buffer.Length); 
      output.Write(buffer, 0, bytesRead); 
     } while (bytesRead == buffer.Length); 
    } 
} 

// Pass the uploaded file data to the above method like this: 
SaveFile(fupAddImage.FileContent, Path.Combine(Server.MapPath("Temp"), tempFilename)) 
1

您需要发布一些代码就知道当然,但该文件可能仍然在某处打开,因此您的应用程序尚未发布文件锁定。尝试关闭任何打开的流并在删除之前处理​​指向该对象的任何文件句柄。

您可能还需要等待操作系统指向它所有的手柄脱手后释放文件。

我猜问题是上面。如果你正在创建一个文件并在下一行删除它,操作系统可能还没有将文件刷新到磁盘,更不用说释放文件句柄和锁。尝试在写入和删除之间给一段时间,看看是否可以再次删除它。

0

尝试打字:

openFiles散在命令提示符(cmd.exe的)file_path_and_filename

上找原因。

,并确保您有删除权限。