1

我收到这个错误

The process cannot access the file '..\Images\Temp\6574_1212665562989_1419270107_30610848_6661938_n.jpg' because it is being used by another process.

当我尝试这个时:

try
{
    var file = Request.Files["FileProfilePicture"];
    file.SaveAs(Server.MapPath("~/Images/Temp/" + file.FileName));
    Bitmap imageOrj = new Bitmap(System.Web.HttpContext.Current.Server.MapPath("~/Images/Temp/" + file.FileName));
    Image imageBig = ResizeImage.Resize(imageOrj, 100, 100);
    imageBig.Save(System.Web.HttpContext.Current.Server.MapPath("~/Images/ProfilePicBig/" + file.FileName));
    Image imageSmall = ResizeImage.Resize(imageOrj, 50, 50);
    imageSmall.Save(System.Web.HttpContext.Current.Server.MapPath("~/Images/ProfilePicSmall/" + file.FileName));

    string[] files = System.IO.Directory.GetFiles(Server.MapPath("~/Images/Temp/"));
    foreach (string pathFile in files)
    {
        System.IO.File.Delete(pathFile);
    }


    return RedirectToAction("Index", "Author");
}
catch (Exception e)
{
    ModelState.AddModelError("", "Kullanıcı bilgileri güncellenirken bir hata oluştu. Lütfen daha sonra tekrar deneyin." + e.Message);
}

我该如何解决。或者另一种将图像保存为临时文件的更好方法。我应该将文件保存在临时文件夹中吗?

谢谢

4

3 回答 3

1

您不需要保存临时文件。您可以在内存中创建位图并使用请求流填充它。无需将其保存到磁盘。

于 2012-04-24T12:22:30.797 回答
1

你确定你没有在其他地方打开临时文件吗?

当您在之前的运行中出现错误并且文件尚未关闭时,也会发生此错误。在这种情况下,您可以尝试使用不同的文件名,或者只是从操作系统端删除未关闭的文件。

我希望这有帮助...

否则,我通常使用类似的方式来处理临时文件......

编辑:根据评论,上述问题的解决方案似乎如下:每当在 try-catch 块中处理时,如果未在 catch 节点中处理文件对象,则文件对象可能不会被关闭。在这种特定情况下,imageOrj对象导致了问题,因此建议在位imageOrj.Dispose()图编辑完成后使用。

于 2012-04-24T12:28:34.830 回答
-1

您删除的文件似乎比在删除循环中创建的文件多。您正在尝试删除 ~/Images/Temp/ 下的每个文件,这可能会产生冲突(即不同请求之间的数据竞争)。仅删除您刚刚创建的文件。

于 2012-04-24T12:55:53.660 回答