无法编辑/删除目录中的文件

时间:2012-05-22 06:18:12

标签: c# asp.net image

在执行以下操作时,我无法在Visual Studio 2005中更新文件(noimg100.gif)。

这是代码,

String fileNotFoundPath = context.Server.MapPath("~/common/images/noimg100.gif");
context.Response.ContentType = "image/gif";
Image notFoundImage = Image.FromFile(fileNotFoundPath);
notFoundImage.Save(context.Response.OutputStream, ImageFormat.Gif);

我做错了什么或者我是否需要在最后处理图像?

编辑: 我找到了以下链接,其中说它不使用Image.FromFile我使用的方式: http://support.microsoft.com/kb/309482

1 个答案:

答案 0 :(得分:1)

从文件打开图像时,只要图像存在,文件就会保持打开状态。由于您没有处置Image对象,它将继续存在,直到垃圾收集器完成并处理它。

Image对象置于代码末尾,然后可以再次写入该文件。

您可以使用using块来处置对象,然后即使代码中出现错误,您仍然可以确保它始终处理掉:

String fileNotFoundPath = context.Server.MapPath("~/common/images/noimg100.gif");
context.Response.ContentType = "image/gif";
using (Image notFoundImage = Image.FromFile(fileNotFoundPath)) {
  notFoundImage.Save(context.Response.OutputStream, ImageFormat.Gif);
}

此外,由于您不以任何方式更改图像,因此将其解压缩然后重新压缩是一种浪费。只需打开文件并将其写入流:

String fileNotFoundPath = context.Server.MapPath("~/common/images/noimg100.gif");
context.Response.ContentType = "image/gif";
using (FileStream notFoundImage = File.OpenRead(fileNotFoundPath)) {
  notFoundImage.CopyTo(context.Response.OutputStream);
}