StreamWriter.WriteLine() не работает

Я пытаюсь записать несколько строк, по одной, в файл.txt, используя StreamWriter.WriteLine (не статично).

const string filename = "BasicTestInfo.txt";
        using (var writer = new StreamWriter(filename, false))
        {
            writer.WriteLine("{0} 350 200 200 10 2 28 20 200 2500 1200 1 1", Player1);
            writer.WriteLine("{0} 300 150 150 4 2 15 18 150 2500 1000 1 0", Player2);
            writer.WriteLine("{0} 200 140 450 25 14 10 70 4500 2500 750 1 1", Player3);
            writer.WriteLine("{0} 175 120 400 15 3 8 50 3000 2500 850 1 0", Player4);
            writer.WriteLine("{0} 300 100 300 8 1 4 30 1000 2500 1200 1 0", Player5);
            writer.WriteLine("{0} 450 310 450 20 5 5 35 1500 2500 700 1 1", Player6);
        }

Каждый из объектов игрока является струнным. Если я запускаю это с другим именем файла (aka BasicTestInfo2.txt), он создает этот файл в bin.Debug, но он пуст. Я знаю, что достигну внутренней части блока using (я поместил туда Console.WriteLine), и я знаю, что хочу усечь, поэтому я использую false для добавления (хотя заменяю false на true или без параметра вообще не решает проблему).

Основная проблема заключается в том, что даже если файл создается, в нем нет строк текста.

4 ответа

Да, это правда, что в VB.net это (эксклюзивная очистка) не требовалось при настройках по умолчанию, но в C# вам необходим вызов Writer.Flush для принудительной записи. Конечно - Writer.Close() также принудительно выполнит сброс. В качестве альтернативы мы можем установить свойство AutoFlush экземпляра StreamWriter:

sw.AutoFlush = true;
// Gets or sets a value indicating whether the StreamWriter 
// will flush its buffer to the underlying stream after every  
// call to StreamWriter.Write.

От: http://msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush(v=vs.110).aspx

Заметьте, что: конструкция "с помощью" устранит исключительный флеш, но многие люди приземляются здесь только на основании предмета этого вопроса, и это самый низкий висячий фрукт, когда сталкивается с проблемой.

Закрыть писателя

writer.close();

Это сработало для меня.

Показанный код выглядит хорошо.

Если бы мне пришлось угадывать, я бы заподозрил, что есть исключение (возможно, из хитроумного ToString реализация на PlayerВы глотаете что-то.

Шаг через код, чтобы увидеть, что происходит, когда вы просматриваете каждый последующий WriteLineи идет ли он до самого конца using заблокировать без ошибок.

У меня была похожая проблема.

Я исправил это таким образом, просто поместил вашу строку в String.Format():

writer.WriteLine(String.Format("{0} 350 200 200 10 2 28 20 200 2500 1200 1 1", Player1));
Другие вопросы по тегам