进程无法访问该文件,因为它正由另一个进程使用

时间:2012-01-25 16:50:04

标签: c# asp.net .net webforms io

我正在使用带有C#的ASP.NET Webforms。在一个页面上,我单击“提交”以在服务器上创建文件。

File.Create(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"])
            + landingPage.FriendlyName);

这很好,并按预期创建文件。但是,在执行此操作后,它会重定向到另一个页面,该页面将读取刚刚创建的文件。

var landingPageContent 
       = File.ReadAllText(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"]) 
                          + landingPage.FriendlyName);

那是我收到此错误的时候。

  

该进程无法访问文件'c:\ code \ Content \ CMS \ LandingPages \ Test2',因为它正由另一个进程使用。

如果我重新启动IIS,那么进程会释放该文件,我可以加载该页面并正确读取该文件。在File.Create之后我需要做些什么才能在重定向之前关闭文件?

4 个答案:

答案 0 :(得分:9)

您关闭了File.Create返回的流吗?这个名字有点令人困惑(它从WinAPI的内容中传出来),但是它会创建一个文件并且会打开它来为你写作。

答案 1 :(得分:7)

File.Create返回Filstream,试试这个:

using (FileStream fs = System.IO.File.Create(...)){}

或更短:

File.Create(...).Dispose();

答案 2 :(得分:4)

尝试更换:

File.Create(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"]) + landingPage.FriendlyName);

使用:

using(File.Create(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"]) + landingPage.FriendlyName))
{}

所以文件句柄立即处理/释放

答案 3 :(得分:3)

关闭它:

var fileStream = File.Create(...);
fileStream.Close();

如果您正在使用创建的文件执行某些操作,最好通过using块包装此逻辑,最终将关闭句柄:

using (var stream = File.Create(...))
{
   // logic
}