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