【发布时间】:2021-07-21 23:51:49
【问题描述】:
使用 C# 和 .net 4.8,我有一个 API 方法供用户上传文件。
我将文件保存到临时目录,进行一些处理,然后将其保存到最终目标目录。
在进程结束时,我想从临时目录中删除文件,但出现异常:
该进程无法访问该文件,因为它正被另一个进程使用。
在这一行:
File.Delete(originalTmpPath);
为了缩小问题的范围,我已经删除了所有进行额外处理的代码,所以现在我的代码只做 3 件事:
- 将文件保存到临时目录。
- 将“在临时目录中”的文件保存到另一个目录。
- 删除第一个文件
这里是 API 中的代码:
HttpResponseMessage result = null;
var httpRequest = HttpContext.Current.Request;
var file = httpRequest.Files[0];
// Save image to temp folder
file.SaveAs(originalTmpPath);
// Save image to final folder
Bitmap bmp = new Bitmap(System.Drawing.Image.FromFile(originalTmpPath));
bmp.Save(originalPath);
//Exception here:
File.Delete(originalTmpPath);
知道如何停止进程/解锁文件并删除它吗?
谢谢
【问题讨论】:
-
就在这里
System.Drawing.Image.FromFile(originalTmpPath)你可能没有释放资源。使用变量并调用dispose。如果可行,请在代码的最终版本中使用using (var img = ...) -
您需要
Dispose()ofbmp才能删除它。可能,使用using语句(using块内的Save())声明位图对象。Clone()法师,如果您之后仍然需要位图。无论您创建什么图形对象,您都需要处理掉它。 -
有趣。我认为 SO 问题不能有相同的标题..