1

私は答えがどこかにあるに違いないことを知っています.他の多くの質問とMSDN自体の両方からの提案を適用しましたが、おそらくここで何かを見落としています.

これは私の方法です。出力をファイルにダンプするために使用します。わかりやすくするために、オブジェクト宣言をロックします。

private static Object fileLock = new Object();
private static void WriteToFile(string msg, bool WriteLine)
{
    lock (fileLock)
    {
        msg = DateTime.Now.ToShortTimeString() + " - " + msg;

        FileInfo F = new FileInfo("dump.txt");
        using (StreamWriter writer = F.Exists ? F.AppendText() : F.CreateText()) //<--THIS LINE THROWS
        {
            if (WriteLine)
                writer.WriteLine(msg);
            else
                writer.Write(msg);
        }
    }
}

using質問:上記の行IOExceptionで、メソッドを 2 回目に呼び出したときに、別のプロセスがファイルを使用しているという不平を言うのはなぜですか?

私は自分のコードの周りでこのように呼んでいます:

Console.WriteLine(something)
#if(DEBUG)
    Extensions.WriteToFile(something,true);
#endif

繰り返しますが、これは些細な問題であり、他の誰かがこのような質問をして正しい答えを得ていると確信していますが、私はそれを掘り下げることができません.

アップデート

オブジェクトをリファクタリングしてメソッドFileInfoに切り替えると、コードが正常に機能しました。File.XXXとにかく、問題は解決したように見えます。

4

1 に答える 1

2

@Guffa: 宣言はプライベートな静的オブジェクトでなければなりません fileLock = new object();

@alex: あなたのコードは私のマシンで問題なく動作しますが、タスクには少し複雑すぎます。

static void Write(string text, string file)
    {
        using (StreamWriter sw = File.AppendText(file))// Creates or opens and appends
        {
            sw.WriteLine(text);
        }
    }

ウィルス対策ソフトやインデクサーがダンプ ファイルをロックしている可能性があります。

于 2011-11-24T15:42:39.120 に答える