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 });
}
可能有一个(web)方法(类似于GET请求)或其他代码可以检索图像(而不是url),并将其作为流打开。
最有可能的答案是:
- 该文件位于网络共享上,而其他人确实在使用它(它是虚拟目录吗?)
- IIS/您的web服务器正在锁定该文件(请参阅IIS 6/7是否在提供图像文件时锁定图像文件
- 你正在上传与你写信的文件相同的文件(如果这听起来很屈尊俯就,请道歉,但你需要涵盖所有选项!)
由于我找不到POST请求的问题,我意识到它必须在将我带到该页面的GET请求中。原来我调用的是Image.FromFile(),并没有在GET请求中关闭它。