C# 进程无法访问该文件,因为其他进程正在使用该文件

C# 进程无法访问该文件,因为其他进程正在使用该文件,c#,asp.net,.net,webforms,io,C#,Asp.net,.net,Webforms,Io,我将ASP.NET Webforms与C#一起使用。在一个页面上,我单击submit在服务器上创建一个文件 File.Create(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"]) + landingPage.FriendlyName); 这可以正常工作,并按预期创建文件。但是,执行此操作后,它将重定向到另一个页面,该页面将读取刚刚创建的文件 var landingPageContent

我将ASP.NET Webforms与C#一起使用。在一个页面上,我单击submit在服务器上创建一个文件

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,那么进程将释放该文件,我可以加载该页面并读取该文件。在
文件之后是否需要执行某些操作。创建
以便在重定向之前关闭文件?

是否关闭
文件返回的流。创建
?名称有点混乱(它来自WinAPI内部),但它会创建一个文件并打开它供您写入。

file.Create返回Filstream,请尝试以下操作:

using (FileStream fs = System.IO.File.Create(...)){}
或更短:

File.Create(...).Dispose();
尝试替换:

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

因此,文件句柄将被立即处理/释放

只需将其关闭:

var fileStream = File.Create(...);
fileStream.Close();
如果您正在使用创建的文件执行某些操作,则最好通过
使用
块来包装此逻辑,该块最终将关闭一个句柄:

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

啊,我甚至没有注意到它返回了一条小溪。多谢!如果可以,我会接受:)这也行。在Matti的回答之后,我发现做
File.Create(…).Dispose()更容易。谢谢你,西希。
using (var stream = File.Create(...))
{
   // logic
}