我发现了一个在线代码片段,用于在午夜进行翻转记录以管理日志文件,因此它们是可管理的,但遇到了一个我不能找到解决方案的错误。我可能偶然发现了一个解决方案,但不知道如何实现它。它使用StreamWriter来编写文件。
并非每次都有,但通常会给出ObjectDisposed异常"无法打开已关闭的文件。"。类的一部分负责关闭先前的文件并创建一个新文件:
private void checkRollover()
{
// If the date has changed, close the current stream and create a new file for today's date
if (_currentDate.CompareTo(System.DateTime.Today) != 0)
{
try
{
_traceWriter.Close();
_traceWriter.Dispose();
_traceWriter = new StreamWriter(generateFilename(), true);
}
catch (Exception ex)
{
MessageBox.Show("This error: " + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
是不是因为最后的.dispose,因为.close已经或者可能是其他的吗?正如我所说,真的很难过,任何关于为什么会发生这种情况的建议都值得赞赏。如果需要,我可以将全班发布到这里。
编辑无法再次发生错误,但现在确实如此。我还从那里删除了_tracewriter.Dispose()System.NullReferenceException: Object reference not set to an instance of an object.
at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
at System.IO.StreamWriter.Dispose(Boolean disposing)
at System.IO.StreamWriter.Close()
at FixInterface.RollOverTextWriter.checkRollover()
答案 0 :(得分:0)
查看此答案:https://stackoverflow.com/a/7525134/7004050
请勿在{{1}}之后致电Dispose()
,因为后者会隐式执行此操作。