スレッドセーフな?ログファイルの書き出し

  • 投稿日:
  • by
  • カテゴリ:

C#を始めたばかりで、なかなか一つの案件もまともに作れない状況ですが・・・

ちょっといろいろ調べて、マルチスレッドでログファイルを書き込む場合、以下のようにしたら、とりあえずエラーが出なくなったので、簡単にまとめておきます。

private void logging(String logstr)
{
	DateTime dt = DateTime.Now;
	String logfile = LogPath + dt.ToString("yyyyMMdd") + ".log";

FileStream fs = new FileStream(logfile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding(932));
TextWriter tw = TextWriter.Synchronized(sw);
tw.WriteLine(DateTime.Now.ToString() + " " + logstr);
tw.Flush();
fs.Close();
}

肝心なのは、FileStreamでファイルオープンの属性を付けなきゃいけないことだった。

FileStream fs = new FileStream(logfile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);

の部分。

FileShare.ReadWriteにしないと、他のスレッドやプロセスからアクセスしようとすると、IO.Exceptionが発生してしまうみたい。

たぶん他にも排他制御やスレッドセーフな正しいやり方があるのだろうけど、今の私の力量ではこれが限界(^^;)

どなかた正しいやり方があれば教えてください(^^;)