C#可以';t访问文件,因为它正被另一个进程使用

本文关键字:另一个 进程 因为 可以 文件 访问 | 更新日期: 2023-09-27 18:29:12

这是我用来上传图像的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 });
}

C#可以';t访问文件,因为它正被另一个进程使用

可能有一个(web)方法(类似于GET请求)或其他代码可以检索图像(而不是url),并将其作为流打开。

最有可能的答案是:

  • 该文件位于网络共享上,而其他人确实在使用它(它是虚拟目录吗?)
  • IIS/您的web服务器正在锁定该文件(请参阅IIS 6/7是否在提供图像文件时锁定图像文件
  • 你正在上传与你写信的文件相同的文件(如果这听起来很屈尊俯就,请道歉,但你需要涵盖所有选项!)

由于我找不到POST请求的问题,我意识到它必须在将我带到该页面的GET请求中。原来我调用的是Image.FromFile(),并没有在GET请求中关闭它。