C# 进程无法访问该文件,因为其他进程正在使用该文件
我将ASP.NET Webforms与C#一起使用。在一个页面上,我单击submit在服务器上创建一个文件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
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
}