我实施了帮助来显示来自here的缩略图。缩略图旁边有一个调用此控制器的删除链接:
// HTTP POST: /Photo/Delete/1
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(int id, string confirmButton)
{
var path = "~/Uploads/Photos/";
Photo photo = photoRepository.GetPhoto(id);
if (photo == null)
return View("NotFound");
FileInfo TheFile = new FileInfo(Server.MapPath(path + photo.PhotoID + ".jpg"));
if (TheFile.Exists)
{
photoRepository.Delete(photo);
photoRepository.Save();
TheFile.Delete();
}
else return View("NotFound");
return View();
}
如果我禁用显示缩略图,则会删除该文件。否则它会发送错误:
System.IO.IOException:进程无法访问文件'C:\ Documents 和Settings \ ilija \ My Documents \ Visual 工作室 2008 \项目\ CMS \ CMS \上传\照片\ 26.jpg” 因为它被另一个人使用 过程
我也不知道我的文件删除功能是否写得正确。在网上搜索,我看到每个人都使用File.Delete(TheFile);
,我无法使用TheFile.Delete();
。使用File.Delete(TheFile);
时出现以下错误:
错误1'System.Web.Mvc.Controller.File(string, string,string)'是'方法',其中 在给定的情况下无效 上下文C:\ Documents and 设置\ ilija \ My Documents \ Visual 工作室 2008 \ Projects \ CMS \ CMS \ Controllers \ PhotoController.cs 109 17 CMS
我在这里错过了什么吗?
答案 0 :(得分:1)
这是因为,正如它所说,另一个进程已经处理了您的文件,因此您无法删除它。在这种情况下,缩略图生成器会抓取您文件的句柄,从而阻止您删除它。您必须关闭程序中文件的所有句柄才能将其删除。