文件Create()和WriteAllText()在单个类抛出异常中,

时间:2013-07-23 10:18:30

标签: c# asp.net

当我重写下面的代码时,

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

抛出异常,

  

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

我做错了什么,或文件静态方法执行安全检查,即它抛出异常的原因。

3 个答案:

答案 0 :(得分:4)

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

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

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

}

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

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

答案 1 :(得分:4)

File.WriteAllText将为您创建该文件(如果该文件尚不存在),因此您无需先调用File.Create。您收到错误,因为File.Create创建并打开该文件;当您调用File.WriteAllText时,该文件仍处于打开状态。

答案 2 :(得分:3)

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将免费为您处理创作(但它会被覆盖,因此需要注意)。