在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说,多个进程正在试图访问文件

在File. appendalltext之后文件仍然打开

您可以使用Palmer创建一些逻辑,在写入失败时重复写入:

Retry.On<IoException>().For(TimeSpan.FromSeconds(15)).With(context =>
    {
        File.AppendAllText(path, ''n' + tmp);
    });