Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC 2:“;进程无法访问该文件<;文件名>;因为它正被另一个进程使用。”;_Asp.net Mvc_Asp.net Mvc 2_Filestream - Fatal编程技术网

Asp.net mvc ASP.NET MVC 2:“;进程无法访问该文件<;文件名>;因为它正被另一个进程使用。”;

Asp.net mvc ASP.NET MVC 2:“;进程无法访问该文件<;文件名>;因为它正被另一个进程使用。”;,asp.net-mvc,asp.net-mvc-2,filestream,Asp.net Mvc,Asp.net Mvc 2,Filestream,我正在尝试使用Controller.File从ASP.NET MVC 2项目中的视图返回FilePathResult。我是这样使用它的: return File(pdfFilePath, "application/pdf", "foo.pdf"); 然而,我在死亡的黄屏上不断地看到这个错误: 进程无法访问文件[文件路径],因为另一进程正在使用该文件。 当您忘记关闭文件流时,通常会出现此错误,但我认为这应该由ASP.NET MVC框架来处理。这不是每次都会发生,而是周期性的。有时我得到的文件很好

我正在尝试使用
Controller.File
从ASP.NET MVC 2项目中的视图返回
FilePathResult
。我是这样使用它的:

return File(pdfFilePath, "application/pdf", "foo.pdf");
然而,我在死亡的黄屏上不断地看到这个错误:

进程无法访问文件[文件路径],因为另一进程正在使用该文件。 当您忘记关闭文件流时,通常会出现此错误,但我认为这应该由ASP.NET MVC框架来处理。这不是每次都会发生,而是周期性的。有时我得到的文件很好,但它只是停止工作。我正在使用开发服务器进行测试


有什么想法吗?

收到此消息时,文件是否已打开


如果您这样做,可能是Adobe锁定了文件。

最可能的情况是ASP.NET/IIS以外的其他东西打开了文件。发生此错误时,您是否已确保没有其他进程锁定该文件


如果发生错误时您有权访问服务器,则可以使用类似的工具查看锁定文件的确切内容。

您是否在访问提供的代码行之前访问文件?如果是,您如何访问它

访问文件时,请尝试使用以下方法避免文件流冲突:

File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
最后一个枚举
FileShare.ReadWrite
将允许其他文件流读取和写入该文件,即使您已将其打开。当然,最好记住尽快关闭流


锁定可以在asp.net本身中发生-因为asp.net显示线程敏捷性,因此它可能是asp.net线程池中完成请求的另一个线程。这就是为什么你只能断断续续地看到这个问题。
坏人的答案基本上就是解决你的问题。另外,如果使用的资源包含声明为threadstatic的状态,则可能会发现其他问题。如果是这种情况,您可能需要考虑使用CallContext。

我没有打开它。其他文件(如图像)也会发生这种情况。使用Process Explorer,我发现唯一无法访问该文件的时间是devenv.exe(或更具体地说是WebDev.WebServer.exe)获取该文件时。每当它不这样做,我可以下载它只是罚款。现在我需要做的就是弄清楚为什么会这样?您是否在访问您提供的代码行之前访问该文件?如果是这样的话,你是如何访问它的?@Baddie:啊,我实际上是在使用File.Open来获取文件的长度,在使用下载链接呈现页面时,从未关闭它。把它作为一个答案,我会接受的。对于任何有同样问题的人:我用
FileMode在代码的另一部分打开了文件。打开
而不关闭它。