1

我使用 mvc 并且我有一个控制器,它获取文件名并将其从服务器中删除,当我在本地计算机上使用 Visual Studio 开发服务器时,此页面(控制器)成功删除文件但在生产服务器上我得到以下错误:

The process cannot access the file 'filename' because it is being used by another process

System.IO.File.Delete(Server.MapPath("~/content/myFolder/" + id));

在这行代码之前,我只是做了一个不访问文件的自定义请求验证。此文件已被另一个页面保存在此页面之前。

事实上,我想知道哪个进程可能正在访问这个文件。之前页面(控制器)中的任何代码是否可能导致此问题?我已经搜索过,但没有发现任何有用的东西。

4

2 回答 2

1

您可以检查运行应用程序池的身份,然后检查该帐户的权限。要检查哪个进程锁定了文件,请尝试此链接。

于 2013-10-07T10:42:00.997 回答
0

当使用实现 IDisposable 接口的类型的对象时,您应该dispose在不再需要对象时立即调用方法。

CLR 的垃圾收集器很智能,它在执行垃圾收集时会释放资源。但问题是垃圾收集器不会在控制离开当前范围后立即收集对象。但是当第 0 代的内存已满或您通过collect在代码中调用方法强制执行时,它会收集它。

所以最好在不再需要资源时清理它们。

于 2013-10-07T08:01:45.810 回答