ObjectDisposedOf翻转日志编写器中的Excipetion

时间:2017-06-30 10:51:24

标签: c# streamwriter

我发现了一个在线代码片段,用于在午夜进行翻转记录以管理日志文件,因此它们是可管理的,但遇到了一个我不能找到解决方案的错误。我可能偶然发现了一个解决方案,但不知道如何实现它。它使用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()

1 个答案:

答案 0 :(得分:0)

查看此答案:https://stackoverflow.com/a/7525134/7004050

请勿在{{1​​}}之后致电Dispose(),因为后者会隐式执行此操作。