单个类中的File Create()和WriteAllText()引发异常,

本文关键字:异常 WriteAllText File Create 单个类 | 更新日期: 2023-09-27 18:24:31

当我生成下面这样的代码时,

protected void Page_Load(object sender, eventAgrs e)
{
  string xDoc ="Durgesh kumar rao";
  File.Create(Server.MapPath("~/XML"));
  File.WriteAllText(Server.MapPath("~/XML"), xDOC);
}

这个抛出异常,

进程无法访问该文件,因为另一个进程正在使用该文件

我是做错了什么,还是文件静态方法预处理安全检查,即它为什么抛出异常。

单个类中的File Create()和WriteAllText()引发异常,

File.WriteAllText将为您创建文件(如果该文件不存在),因此您不需要调用File.create first。您收到错误是因为File.Create创建并打开文件;调用file.WriteAllText.

时,该文件仍处于打开状态

File.Create创建文件并在其周围返回一个打开的FileStream,因此您已经有了对以独占方式锁定它的文件句柄的引用。在任何情况下,您都应该处理结果,在任何其他情况下,都不应该丢弃调用的返回值。

所以,简而言之,处理你的创作:

using (FileStream stream = File.Create(path)) {
}

但是,如果文件不存在,File.WriteAllText创建该文件,因此对Create的调用是多余的,而不是有问题的。不会返回"延迟"流,它只是做了事情,就这样,所以只需使用:

File.WriteAllText(Server.MapPath("~/XML"), xDOC);

File.Create方法将返回一个FileStream,使您可以访问该文件。你没有使用它。所以文件是打开的,并锁定给你写,因此,你的下一个语句就失效了。

但是,您根本不需要File.Create

http://msdn.microsoft.com/en-us/library/ms143375.aspx

Creates a new file, writes the specified string to the file, and then closes the file. If the target file already exists, it is overwritten.

File.WriteAllText将免费为您处理创建(但它已被覆盖,因此需要注意)。