Dispose
вызывает Flush
, который записывает внутренние байты, хранящиеся в буфере, на диск
Не закрывая или не удаляя файл, вы оставляете неуправляемые ресурсы вокруг и потенциально заблокируете файл, не говоря уже об утечках памяти. Вместо этого всегда используйте using
оператор
using (TextWriter writer = File.CreateText(@"...txt"))
{
writer.Write("Hello World");
}
Однако, если вы хотите непрерывно записывать в файл, вам придется его сбросить
Метод FileStream.Flush
Очищает буферы для этого потока и заставляет любые буферизованные данные быть
записано в файл.
TextWriter writer = File.CreateText(@"...txt");
...
writer.Write("Hello World");
...
writer.Flush(); // at this point the bytes are flushed to disk
...
...
writer.Dispose();
Короче говоря, большинство потоков поддерживаются внутренним массивом (буфером), так что вы не трэш записываете. Размер по умолчанию равен 4 КБ, когда он достигает размера буфера, он автоматически сбрасывается. Если вы хотите видеть немедленные записи, вы должны очищать их каждый раз
Наконец, некоторые потоки имеют функцию автоматического сброса, которая может сделать эту работу за вас
AutoFlush
Получает или задает значение, указывающее, будет ли сбрасываться StreamWriter
его буфер к базовому потоку после каждого вызова Write (Char)
Когда вы закончите с потоком всегда утилизируйте его