我建立了一个系统,用户可以将文件(图像)上传到服务器,服务器保存。一切都很好,但是当我想删除用户上传的文件时,我得到一个例外:
the process cannot access the file because it is being used by another process
这是保存文件的代码:
HttpFileCollection files = httpRequest.Files;
for (int i = 0; i < files.Count; i++) {
var postedFile = files[i];
// I tried this one before, but I read that I should .Dispose() files, therefore
// I settled to the other, uncommented solution (however, both of them do the same thing)
//postedFile.SaveAs(filePath);
using (FileStream fs = File.Create(filePath)) {
postedFile.InputStream.CopyTo(fs);
postedFile.InputStream.Close();
postedFile.InputStream.Dispose();
fs.Dispose();
fs.Close();
}
}
删除文件非常简单。在名为Delete的方法中,我称之为:
...
File.Delete(HttpContext.Current.Server.MapPath(CORRECT_PATH_TO_FILE));
...
有关如何解决此问题的任何建议?
由于
答案 0 :(得分:1)
正如Michael Perrenoud在我的主要问题的评论中建议我的那样,我也在另一个类中打开文件,并且在完成使用它时没有处理它。因此问题得以解决。谢谢!
答案 1 :(得分:0)
你在哪里尝试删除文件的方法?作为循环的一部分?如果是这样,将其锁定是很自然的。如果在循环之外,那么它是一个不同的问题(可能还没有收集垃圾?)。
要避免循环问题,请收集要删除的位置列表(在循环外部声明,可以在其中填充),然后在另一个位置删除&#34;清理&#34;循环(另一种方法对于可重用性更好)。
注意:在Dispose()之前关闭()而不是相反。你实际上不必同时做这两件事,因为Dispose()应该始终处理确保一切都干净(特别是在.NET框架中使用IDisposable),但我没有看到Close()后面的Dispose( )。