上传ASP.NET后删除文件

时间:2014-05-13 14:50:50

标签: c# asp.net asp.net-mvc file-upload

我建立了一个系统,用户可以将文件(图像)上传到服务器,服务器保存。一切都很好,但是当我想删除用户上传的文件时,我得到一个例外:

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));
...

有关如何解决此问题的任何建议?

由于

2 个答案:

答案 0 :(得分:1)

正如Michael Perrenoud在我的主要问题的评论中建议我的那样,我也在另一个类中打开文件,并且在完成使用它时没有处理它。因此问题得以解决。谢谢!

答案 1 :(得分:0)

你在哪里尝试删除文件的方法?作为循环的一部分?如果是这样,将其锁定是很自然的。如果在循环之外,那么它是一个不同的问题(可能还没有收集垃圾?)。

要避免循环问题,请收集要删除的位置列表(在循环外部声明,可以在其中填充),然后在另一个位置删除&#34;清理&#34;循环(另一种方法对于可重用性更好)。

注意:在Dispose()之前关闭()而不是相反。你实际上不必同时做这两件事,因为Dispose()应该始终处理确保一切都干净(特别是在.NET框架中使用IDisposable),但我没有看到Close()后面的Dispose( )。