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

时间:2014-08-14 16:01:26

标签: c# asp.net file-io

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

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

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

File.WriteAllText(TheFileJS, TheJS);

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

我需要更改代码以确保此错误永远不会发生?

感谢。

2 个答案:

答案 0 :(得分:5)

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

好消息是,通过不先删除文件,这很容易解决。

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

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

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

答案 1 :(得分:3)

试试这个。在file创建期间,如果打开任何stream,它将被关闭。

FileStream stream = File.Create(TheFileJS);
stream.Close();