1

当我使用如下代码时,

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

这个抛出异常,

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

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

4

3 回答 3

4

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

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

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

}

但是,如果文件不存在,File.WriteAllText Create创建该文件,因此您的调用除了有问题之外,是多余的。这不会返回一个“挥之不去”的流,它只是做的事情就是这样,所以只需使用:

File.WriteAllText(Server.MapPath("~/XML"), xDOC);
于 2013-07-23T10:21:04.133 回答
4

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

于 2013-07-23T10:22:05.153 回答
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将免费为您处理创作(但它被覆盖,所以有一个警告)。

于 2013-07-23T10:22:42.393 回答