我正在使用带有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
之后我需要做些什么才能在重定向之前关闭文件?
答案 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
}