我正在尝试以Asp.Net形式(.aspx)写入文件。我可以使用
创建文件 if (!File.Exists(Settings.Default.FileLocation))
{
File.Create(Settings.Default.FileLocation);
}
但是当我使用此代码写入文件时:
File.WriteAllBytes(Settings.Default.FileLocation, someByteArray);
我得到一个例外:
System.IO.IOException: The process cannot access the file 'C:\inetpub\wwwroot\mysite.com\captured\captured.xml' because it is being used by another process.
(在这种情况下' C:\ inetpub \ wwwroot \ mysite.com \ captured \ captured.xml' == Settings.Default.FileLocation)
在此期间,我无法在Windows资源管理器中删除或复制该文件。但是,如果我停止或重新启动WebForm正在运行的应用程序池,则错误消失。造成这种情况的原因是什么?如何预防?
这是在Win服务器2012 R2和IIS 7.5上运行
答案 0 :(得分:6)
阅读documentation on MSDN。您应该使用using
语句打开文件,以便确保关闭它的任何打开句柄。
using(FileStream fs=File.Create(Settings.Default.FileLocation))
{
//manipulate file here
}
此外,File.WriteAllBytes
will create the file if it doesn't exist,因此无需单独创建它。
答案 1 :(得分:1)
File.Create默认打开文件进行读/写,需要关闭才能再次使用。来自文档:
如果文件不存在,默认情况下,对所有人授予对新文件的完全读/写访问权限 用户。该文件以读/写访问权限打开,必须关闭 在它被另一个应用程序打开之前。
File.WriteAllBytes将创建该文件,因此我认为检查文件存在并创建它的代码可能有点过分。