2016-10-13 4 views
1

Создание консольного приложения, и я пытаюсь настроить файл журнала, чтобы отслеживать действия моего приложения. Вот как я настраиваю свой FileStream и Writer.Почему Wont console.SetOut (StreamWriter) пишите в мой файл?

FileStream logstrm; 
StreamWriter logwriter; 
logstrm = new FileStream("file.txt", FileMode.OpenOrCreate, FileAccess.Write); 
logwriter = new StreamWriter(logstrm); 

Перед вызовом SetOut следующее сообщение корректно выводит текст на консоль.

Console.WriteLine("LOG FILES CREATED"); 

Однако, как только я делаю следующее, я ожидаю, что текст должен быть записан в file.txt, но нет ничего в файле, когда я открываю его.

Console.SetOut(logwriter); 
Console.WriteLine("TEXT EXPECTED TO BE IN FILE.TXT"); 

Любые идеи или я просто делаю это совершенно неправильно?

+0

Close Stream - logwriter.Close() – Jivan

+0

Это печально известная проблема Unix, «getta byte, getta byte byte byte», чтобы получить мнение дизайнера Windows о практике. Мало что он мог с этим поделать. Вы должны установить для свойства StreamWriter.AutoFlush значение * true *. –

ответ

0

Просто вы не закрыть выходной файл

logwriter.Close(); 

Либо использовать Flush или закрыть файл

PS: Еще один тест: Вы можете продолжать писать в консоль, пока вы превышать внутренний буфер размер, а затем вы увидите, что некоторые символы записаны в файл

0

Файл ввода-вывода буферизуется и, возможно, его необходимо очистить, чтобы на самом деле записать файл.

Вы можете явно сбросить файлы, вызвав StreamWriter.Flush; в качестве альтернативы вы можете установить AutoFlush, чтобы поток сбрасывался после каждого вызова Write.

Файлы автоматически очищаются от Close.