我正试图从文件系统中检索一个图像,并通过HttpResponseMessage传递其内容,然后删除该图像。我可以获得成功传递图像的响应,但由于错误而无法删除:
进程无法访问文件"C:…"。。。\Temp\c8530ae-ae92-49f3-8f62-cd1f5467fe8a1.jpeg',因为它正被另一个进程使用。
我的控制器代码:
{
Image returnImg = Image.FromFile(@"C:...Temp" + id + "1" + ".jpeg");
MemoryStream memoryStream = new MemoryStream();
returnImg.Save(memoryStream, ImageFormat.Jpeg);
var message = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ByteArrayContent(memoryStream.ToArray())
};
message.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
File.Delete(@"C:...Temp" + id + "1" + ".jpeg"); //error is on this line execution
return message
}
我想这与内存流有关,是不是我缺少了一个关闭操作?
Image对象returnImg实现IDisposable接口。您必须将其放置在using{}块中。此外,MemoryStream未正确关闭。
当一个类实现IDisposable类,并且您正在创建该类的实例时,您应该将其包装在using块中,这样该类就可以正确地销毁对象。尝试:
{
using(Image returnImg = Image.FromFile(@"C:...Temp" + id + "1" + ".jpeg"))
{
using(MemoryStream memoryStream = new MemoryStream())
{
returnImg.Save(memoryStream, ImageFormat.Jpeg);
var message = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ByteArrayContent(memoryStream.ToArray())
};
}
message.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
}
File.Delete(@"C:...Temp" + id + "1" + ".jpeg"); //error is on this line execution
return message
}