1

エラーが発生しました。

「閉じた TextWriter に書き込めません。」

コード:

public class Logs
{
    static string File_Path= "";
    static public FileStream fs;
    static public StreamWriter sw;
    public static void Initialize(string path)
    {
        File_Path = path;

        fs = new FileStream(File_Path, FileMode.Append, FileAccess.Write);
        sw = new StreamWriter(fs);
    }
    public static void info_log(string msg)
    {                      
        sw.WriteLine("{0} [INFO] : {1}",DateTime.Now.ToString(),msg);
        sw.WriteLine(" ");
        sw.Close();
        sw.Flush();
    }
    public static void error_log(Exception ex)
    {
        sw.WriteLine("{0} [ERROR] : {1}", DateTime.Now.ToString(), ex.Message);
        sw.WriteLine("StackTrace : {0}:", ex.StackTrace);
        sw.WriteLine(" ");
        sw.Close();
        sw.Flush();
    }
    public static void warning_log(string msg)
    {
        sw.WriteLine("{0} [WARNING] : {1}", DateTime.Now.ToString(), msg);
        sw.WriteLine(" ");
        sw.Close();
        sw.Flush();
    }
}
4

1 に答える 1

2

さて、あなたは StreamWriter を閉じており、書き込みごとにそれをフラッシュしています。つまり、ストリームを閉じてから書き込みを試みます。

通常は、一度初期化してからロギング メソッドを使用します。sw.Flush()それはアフターライティングだけが必要です。(だから...sw.Close()各メソッドでそれを削除してください)。

ただし、アプリケーションが非常にまれな状況でのみメッセージをログに記録する場合は、各呼び出しの前に初期化し (めったに発生しないため)、フラッシュ後に閉じます。sw.Flush()それにはとの並べ替えが必要sw.Close()です。

于 2012-08-15T06:05:09.963 に答える