写入Asp.Net中的文件

Mik*_*e_G 0 c# asp.net

我试图写一个Asp.Net形式的文件(.aspx).我可以使用创建文件,

  if (!File.Exists(Settings.Default.FileLocation))
     {
       File.Create(Settings.Default.FileLocation);
     }
Run Code Online (Sandbox Code Playgroud)

但是当我使用这段代码写入文件时:

File.WriteAllBytes(Settings.Default.FileLocation, someByteArray);
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

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.
Run Code Online (Sandbox Code Playgroud)

(在这种情况下'C:\ inetpub\wwwroot\mysite.com\captured\captured.xml'== Settings.Default.FileLocation)

在此期间,我无法在Windows资源管理器中删除或复制该文件.但是,如果我停止或重新启动WebForm正在运行的应用程序池,则错误消失.造成这种情况的原因是什么?如何预防?

这是在Win服务器2012 R2和IIS 7.5上运行

mas*_*son 6

阅读MSDN上文档.您应该使用using语句打开文件,以便确保关闭它的任何打开句柄.

using(FileStream fs=File.Create(Settings.Default.FileLocation))
{
    //manipulate file here
}
Run Code Online (Sandbox Code Playgroud)

此外,File.WriteAllBytes 如果文件不存在,将创建该文件,因此无需单独创建它.