我的代码中有一部分写入文本文件。这是唯一应该写入文件的事件进程,其完成方式如下:
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 错误,指出多个进程正在尝试访问该文件。
最佳答案
您可以使用Palmer创建一些逻辑,如果失败则重复写入:
Retry.On<IoException>().For(TimeSpan.FromSeconds(15)).With(context =>
{
File.AppendAllText(path, '\n' + tmp);
});
关于c# - File.AppendAllText 之后文件仍然打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24858682/