我有一些代码可以将字符串保存到文件中,如下所示:
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.
我需要更改代码以确保此错误永远不会发生?
感谢。
答案 0 :(得分:5)
我想你在删除后仍然打开锁的问题导致你无法再重写文件。
好消息是,通过不先删除文件,这很容易解决。
从docs for WriteAllText
它说“创建一个新文件,将指定的字符串写入文件,然后关闭文件。如果目标文件已经存在,则会被覆盖。”
这意味着它有效地删除了文件的内容,因此无需先检查文件是否存在。如果您没有进行该检查,那么您不应该遇到任何问题。
这也是异常处理会派上用场的地方。如果这是关键代码,那么您可以立即重试或立即向管理员发出警告,希望阻止所有客户进行404操作。
答案 1 :(得分:3)
试试这个。在file
创建期间,如果打开任何stream
,它将被关闭。
FileStream stream = File.Create(TheFileJS);
stream.Close();