ログファイルを管理するために、真夜中にロールオーバーを使用してログを記録するコードスニペットがオンラインで見つかりましたが、管理できない場合があります。ソリューションに遭遇したかもしれませんが、実装方法はわかりません。 StreamWriterを使用してファイルを書き込みます。ObjectDisposedOfロールオーバーログライターでの盛り上がり
必ずしもそうではありませんが、多くの場合、「閉じられたファイルを開くことができません」という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);
}
}
}
.closeはすでにこれを実行したり、それは何か他のものかもしれないとして、それは終わりであるため.disposeのですか?私が言ったように、本当にこれによって困惑した、なぜこれが起こっているかもしれないのかについてのアドバイスは高く評価されます。必要な場合は、クラス全体をここに投稿することができます。
EDITもう一度エラーが発生することはありませんでしたが、今度はそれが行われました。また、私はそこ
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()
[ストリームオブジェクトに対してClose()またはDispose()をコールする必要がありますか?](https://stackoverflow.com/questions/7524903/should-i-call-close-or-dispose-for-stream) -objects) –
スタックトレースで完全な例外を送信し、例外が最初に発生するコードを確認します。 –
上記のコードはスレッドセーフではないため、同じ_traceWriterインスタンスにアクセスする複数のスレッド間の競合状態が考えられます。 – Joe