在File. appendalltext之后文件仍然打开
本文关键字:文件 File appendalltext 之后 | 更新日期: 2023-09-27 18:13:41
我有一部分代码写入一个文本文件。这是唯一一个应该写入文件的活动进程,下面是它是如何完成的:
try
{
File.AppendAllText(path, ''n' + tmp);
}
catch (Exception)
{
lblError.Text = "Unable to save file";
}
这在一半的情况下可以正常工作。但有时它会抛出一个异常,说明该文件正在被另一个进程使用。我查找了哪个进程使用这个文件,以及它的w3wp.exe
。我已经读到,File.AppendAllText
关闭文件,一旦它完成了,所以它应该是好的,就像我已经做到了。对吧?
要求描述目的,所以在这里。这部分代码应该在另一个进程将使用的配置文本文件中追加一行。我100%确定该进程当前没有运行。
我还可以补充说,这是一个asp.net应用程序(从代码后面)。因此,用户可以从asp页面写入config.txt。
我试过了:
static readonly object saveLock = new object();
/*
* stuff
*/
protected void saveToConfig(string input)
{
lock(saveLock)
{
File.AppendAllText(path, ''n' + input);
}
}
但我仍然得到IOException-error说,多个进程正在试图访问文件
您可以使用Palmer创建一些逻辑,在写入失败时重复写入:
Retry.On<IoException>().For(TimeSpan.FromSeconds(15)).With(context =>
{
File.AppendAllText(path, ''n' + tmp);
});