IOException при записи в текстовый файл, несмотря на блокировку блока - PullRequest
1 голос
/ 24 ноября 2011

Я знаю, что ответ должен * где-то быть , я применил предложения как по многим другим вопросам, так и от самого 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 с жалобой, что другой процесс использует файл во второй раз, когда я вызываю метод?

Я называю это так вокруг моего кода:

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

Опять же, я уверен, это тривиальная проблема, и кто-то еще спросил что-то вроде этого, получая правильный ответ, но я не могу выкопать его.

UPDATE

Рефакторинг объекта FileInfo и переключение на методы File.XXX сделали код работающим нормально. Мне все еще интересно, в чем проблема, в любом случае проблема выглядит решенной.

1 Ответ

2 голосов
/ 24 ноября 2011

@ Guffa: объявление должно быть закрытым статическим объектом fileLock = new object ();

@ alex: Ваш код отлично работает на моей машине, хотя он слишком сложен для задачи imo.

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

Возможно, какой-то антивирус или индексатор блокирует ваш файл дампа.

...