C#无法访问文件,因为它被另一个进程使用

时间:2016-01-05 15:42:58

标签: c# .net

这是我上传图片的MVC控制器。我正试图检查一下 文件存在,然后删除旧文件并保存新文件。我在System.IO.File.Delete()收到错误,告诉我文件已经在使用,但我无法弄清楚我把它打开的地方以及如何关闭它。

[HttpPost]   
public ActionResult UploadImage(int? id, HttpPostedFileBase file, EmployeeViewModel employee)
{
    Employee employeeData = db.Employees.Find(id);
    if (file != null && file.ContentLength > 0)
    {
        // Assemble File Path/Extension String
        string[] fileSplit = file.FileName.Split('.');
        string extension = fileSplit[1];
        var fileNameNew = "employeeImage-" + id + "." + extension;
        var path = Path.Combine(Server.MapPath("~/Content/employeeImages/"), fileNameNew);

        var fileExists = System.IO.File.Exists(path);

        if (fileExists)
        {
            System.IO.File.Delete(path);
            file.SaveAs(path);
        }
        else
        {
            file.SaveAs(path);
        }

    }
    return RedirectToAction("Edit", new { id = id });
}

3 个答案:

答案 0 :(得分:1)

可能有一个(web)方法(就像一个GET请求)或其他代码来检索将它作为流打开的图像(而不是url)。

答案 1 :(得分:0)

最可能的答案是:

  • 该文件位于网络共享上,其他人正在使用它(它是虚拟目录吗?)。
  • IIS /您的网络服务器正在锁定该文件(请参阅Does IIS 6/7 lock image files whilst they're being served?
  • 您正在上传与撰写相同的文件(道歉,如果这听起来很光顾,但您需要涵盖所有选项!)

答案 2 :(得分:0)

由于我无法找到POST请求的问题,我意识到必须在GET请求中将我带到该页面。事实证明我正在调用Image.FromFile()而不是在那个GET请求中关闭它。