gpt4 book ai didi

c# - 对多个文件使用多个流会产生 System.ObjectDisposedException "Cannot access a closed file."

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:22 25 4
gpt4 key购买 nike

我想让多个记录器写入不同的文件。写作部分有效,但是当我关闭 Logger 对象时,我得到 System.ObjectDisposedException“无法访问已关闭的文件”。

class Program
{
static void Main(string[] args)
{
Logger logger1 = new Logger("file1.txt");
Logger logger2 = new Logger("file2.txt");
logger1.WriteLog("abcd");
logger2.WriteLog("abcd");
Console.WriteLine("Done");
}
}

class Logger
{
private StreamWriter writer;

public Logger(string filePath)
{
writer = File.AppendText(filePath);
}

~Logger()
{
try
{
writer.Close();
}
catch (Exception)
{

throw;
}
}

internal void WriteLog(string p)
{
writer.WriteLine(p);
}
}

最佳答案

与问题中所述相反,您没有关闭任何记录器。我假设当 Logger 被终结时,这个异常发生在终结器线程上。这是因为无法保证最终确定顺序。 StreamWriter 可能先死了。

删除终结器。它没有任何用处,因为 StreamWriter 在结束时自行关闭(或它写入的流;不确定)。而且您无法确定地清除所有数据(请参阅下面的评论)。这个策略注定失败。你需要把它扔掉。

实现一次性模式并切换到确定性清理。

关于c# - 对多个文件使用多个流会产生 System.ObjectDisposedException "Cannot access a closed file.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29614498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com