使用File.WriteAllText时,另一个进程正在使用该文件

fre*_*hie 4 c# asp.net file-io

我有一些代码将字符串保存到文件,如下所示:

string TheFileJS = HttpRuntime.AppDomainAppPath + "\\SomePath\\" + ClientFileName + ".js";

if (File.Exists(TheFileJS) == true)
{
   File.Delete(TheFileJS);
}

File.WriteAllText(TheFileJS, TheJS);
Run Code Online (Sandbox Code Playgroud)

我正在使用,File.WriteAllText因为我认为它可以防止文件锁定问题但发生的事情是有时我得到错误File is being used by another process.问题是它很少发生,但是一旦在特定文件上发生此异常,所有客户端调用此文件就会产生404.

我需要在代码中更改哪些内容以确保此错误永远不会发生?

谢谢.

Chr*_*ris 7

我想象你在删除后仍然打开锁的问题导致你无法重写文件.

好消息是,通过不首先删除文件可以轻松解决这个问题.

从它的文档WriteAllText说"创建一个新文件,将指定的字符串写入该文件,然后关闭该文件.如果目标文件已经存在,它将被覆盖."

这意味着它无论如何都有效地删除了文件的内容,因此无需先检查文件是否存在.如果您没有进行该检查,那么您不应该遇到任何问题.

这也是异常处理会派上用场的地方.如果这是关键代码,那么您可以立即重试或立即向管理员发出警告,希望阻止所有客户进行404操作.