c# - File.AppendAllText 之后文件仍然打开

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

最佳答案

您可以使用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/

相关文章:

c# - 在 Microsoft.Graph 客户端中查询组成员时出现异常

c# - 我的 FormsAuthenticationTicket 做错了什么?

.net - 如何提高SQL Server存储过程的性能?

c# - System.IO.Exception 错误 : "The requested operation cannot be performed on a file with a user-mapped section open."

c# - C# 中的等宽可编辑文本

c# - LINQ 运算符根据通用分隔符将 double 列表拆分为多个 double 列表

c# - 如何在 C# 中测试一个字符串是否只包含十六进制字符?

c# - 进程名称总是exe的名称吗?

java - 什么是 java.io.IOException : invalid header field?

Java IO 无法读取 Java Applet 下的输入文件