File.AppendAllText后文件仍然打开

时间:2014-07-21 06:14:01

标签: c# .net ioexception w3wp

我有一部分代码写入文本文件。这是应该写入文件的唯一活动进程,以下是它的完成方式:

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错误,说多个进程正在尝试访问该文件。

1 个答案:

答案 0 :(得分:3)

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

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