2016-03-17 2 views
0

Я использую StreamWriter для записи в файловый поток, как такКак вы можете игнорировать буферу StreamWriter

using(StreamWriter writer = File.AppendText('MyFile.csv')) 
{ 
    writer.WriteLine("Header1,Header2") 

    //Write multiple lines based on some logic 
    DoSomeOtherThings(writer) 

    writer.Flush(); 
} 

Если мои ошибки приложений в середине письма, я не хочу писать в файл вообще. Чтобы сделать это, я подумал, что мне просто не нужно краснеть до конца. Однако, даже если есть ошибка, любые записанные данные сохраняются в моем файле.

Есть ли способ игнорировать буфер StreamWriter, чтобы он не сохранял данные в файле, если он не достигнет конца логики?

+0

Очевидно, что вы уничтожили файл независимо от того, что вы делаете, поэтому вам нужно его удалить. Или не добавляйте его. Или вместо этого используйте StringWriter. –

+0

Имейте DoSomeOtherThings пишите в буфер памяти, и если он не сработает, напишите этот буфер памяти в файл. – Quintium

+0

Обертывание логики в попытке поймать и закрыть базовый поток (поток файлов в этом случае) в разделе catch будет разумным вариантом? Это закроет поток до того, как у автора появится возможность сбросить данные. – user2945722

ответ

-1

Я не пробовал, но похоже, что есть свойство AutoFlush на классе StreamWriter. Возможно, вы сможете установить значение false сразу после создания сценария, и он может сделать то, что вы хотите.

0

Flush вызывается в методе Dispose StreamWriter. См. Например, Does Stream.Dispose always call Stream.Close (and Stream.Flush). И Dispose вызывается, даже если произошла ошибка при использовании конструкции «using».

+0

Вызывается ли его также в финализаторе при сборке мусора? Если бы я не мог просто удалить оператор using, чтобы он не удалялся. – user2945722

Смежные вопросы