当我重写下面的代码时,
protected void Page_Load(object sender, eventAgrs e)
{
string xDoc ="Durgesh kumar rao";
File.Create(Server.MapPath("~/XML"));
File.WriteAllText(Server.MapPath("~/XML"), xDOC);
}
抛出异常,
该进程无法访问该文件,因为该文件正由另一个进程使用。
我做错了什么,或文件静态方法执行安全检查,即它抛出异常的原因。
答案 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
将免费为您处理创作(但它会被覆盖,因此需要注意)。