c#ASP.NET如何删除另一个进程“正在使用”的文件?

时间:2010-09-23 01:33:22

标签: c# file-io

我正在加载文件:

System.Drawing.Image img = System.Drawing.Image.FromFile(FilePath);

现在我想保存图片:

img.Save(SavePath);

这有效..除非FilePath == SavePath,否则它决定给我错误:

System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.

所以我试图在打开文件后立即删除该文件:

System.Drawing.Image img = System.Drawing.Image.FromFile(FilePath);
File.Delete(FilePath);

它给了我错误:

System.IO.IOException: The process cannot access the file 'filename.jpg' because it is being used by another process.

所以... 如何修改现有文件,当其未被任何人使用时,该文件是“正在使用”?

2 个答案:

答案 0 :(得分:2)

图像将一直处于锁定状态(See here)。

  

文件保持锁定状态,直到图像被丢弃。

您必须将图像保存在其他位置(或将其内容复制出来),然后使用using子句处理打开的图像。

示例:

using(Image image1 = Image.FromFile("c:\\test.jpg"))
{
    image1.Save("c:\\test2.jpg");
}

System.IO.File.Delete("c:\\test.jpg");
System.IO.File.Move("c:\\test2.jpg", "c:\\test.jpg");

答案 1 :(得分:1)

您可以使用内存流或将其放在byte [] array

http://www.vcskicks.com/image-to-byte.php