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

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

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

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

File.WriteAllText(TheFileJS, TheJS);

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

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

谢谢.

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

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

docs for WriteAllText开始,它说“创建一个新文件,将指定的字符串写入文件,然后关闭文件.如果目标文件已存在,则会被覆盖.”

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

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

转载注明原文:c# – 使用File.WriteAllText时,另一个进程正在使用文件 - 代码日志