我有一部分代码写入文本文件。这是应该写入文件的唯一活动进程,它是如何完成的:
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 错误,说多个进程正在尝试访问该文件。