0

在执行以下操作时,我无法在 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

4

1 回答 1

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);
}
于 2012-05-22T06:26:05.543 回答