Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用File.WriteAllText时,另一个进程正在使用该文件_C#_Asp.net_File Io - Fatal编程技术网

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

C# 使用File.WriteAllText时,另一个进程正在使用该文件,c#,asp.net,file-io,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.writealText,因为我认为这样

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

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

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

File.WriteAllText(TheFileJS, TheJS);
我使用的是
File.writealText
,因为我认为这样可以防止文件锁定问题,但发生的情况是,有时我会收到另一个进程正在使用
文件的错误信息。问题是它很少发生,但一旦在特定文件上发生此异常,对该文件的所有客户端调用都会导致404


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

我可以想象,删除后锁仍处于打开状态,这会导致您无法重写该文件

好消息是,不首先删除文件就可以很容易地解决这个问题

从中,它表示“创建一个新文件,将指定的字符串写入该文件,然后关闭该文件。如果目标文件已存在,则会覆盖该文件。”

这意味着它实际上删除了文件的内容,因此不需要先检查文件是否存在。如果你没有做那项检查,那么你不应该遇到任何问题


这也是异常处理派上用场的地方。如果这是关键代码,那么您可以重试或立即向管理员发出警报,希望能够阻止所有客户端进行404。试试这个。在
文件
创建过程中,如果任何
被打开,它将被关闭

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

对2个或更多并发请求使用相同文件名的可能性有多大?特别是如果用户手动输入。您将得到大量
asdf
文件。0机会:该文件名存储在数据库中,当新文件请求名称时,代码首先在数据库中检查名称是否正在使用。名称是唯一的。但当然,一旦创建和写入,可能会有许多客户端对同一个文件的请求,其中一些将是并发的,尽管这在我的本地计算机上发生,所以它不是并发请求。好的,我删除了delete语句,我将在这段代码周围添加一个try/catch,以查看此错误是否再次出现。