Работа с классами StreamWriter и StreamReader

Классы StreamWriter и StreamReader удобны во всех случаях, когда нужно читать или записывать символьные данные (например, строки). Оба типа работают по умолчанию с символами Unicode, однако их конструкторы поддерживают параметр encoding, позволяющий указывать используемую кодировку.

Класс StreamReader унаследован от абстрактного класса по имени Text Reader. Базовый класс предла- гает очень ограниченный набор функциональности каждому из его наследников, в частности — возможность читать и "заглядывать" (peek) в символьный поток.

Класс StreamWriter наследуется от абстрактного базового класса по имени ТехtWriteг. В этом классе определены члены, позволяющие производным типам записывать текстовые данные в заданный символьный поток.

Основные члены TextWriter:

Close() Этот метод закрывает объект-писатель и освобождает все связанные с ним ресурсы. В процессе автоматически сбрасывается буфер (функционально эквивалентен Dispose())
Flush() Этот метод очищает все буферы текущего объекта-писателя и записывает все буферизованные данные на лежащее в основе устройство, однако, не закрывает его
NewLine Это свойство задает константу перевода строки. По умолчанию ограничителем строки в Windows является возврат каретки, за которым следует перевод строки (\r\n)
Write() Записывает данные в текстовый поток без добавления константы новой строки
WriteLine() Записывает данные в текстовый поток с добавлением константы новой строки

Унаследованный класс StreamWriter предоставляет соответствующую реализацию методов Write(), Close() и Flush(), а также определяет дополнительное свойство AutoFlush. Когда это свойство установлено в true, оно заставляет StreamWriter выталкивать данные при каждой операции записи. Можно обеспечить более высокую производительность, установив AutoFlush в false, но при этом необходимо всегда вызывать Close() по завершении работы с StreamWriter.

Запись в текстовый файл:

// Получить StreamWriter и записать строковые данные.

using (StreamWriter writer = File.CreateText("test.txt"))

{

writer.WriteLine("Line 1");

writer.WriteLine("Line 2");

writer.WriteLine("Line 3");

for (int i = 0; i < 10; i++)

writer.Write(i + " ");

// Вставить новую строку.

writer.Write(writer.NewLine);

}

Основные члены TextReader:

Peek() Возвращает следующий доступный символ, не изменяя текущей позиции читателя. Значение -1 указывает на достижение конца потока
Read() Читает данные из входного потока
ReadBlock() Читает указанное максимальное количество символов из текущего потока и записывает данные в буфер, начиная с заданного индекса
ReadLine() Читает строку символов из текущего потока и возвращает данные в виде строки (null-строка указывает на признак конца файла (EOF))
ReadToEnd() Читает все символы от текущей позиции до конца потока и возвращает их в виде одной строки

Чтение из текстового файла

using (StreamReader sr = File.OpenText("test.txt"))

{

string input = null;

while ((input = sr.ReadLine())!= null)

{

Console.WriteLine(input);

}

}

Кроме методов CreateText() типов File или Filelnfo объекты StreamWriter и StreamReader можно создавать напрямую. Например

StreamWriter writer = new StreamWriter("test0.txt");

StreamReader sr = new StreamReader("test1.txt");


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: