写入Asp.Net中的文件

时间:2014-07-11 18:45:32

标签: c# asp.net

我正在尝试以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上运行

2 个答案:

答案 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将创建该文件,因此我认为检查文件存在并创建它的代码可能有点过分。