Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прога - ответы2.docx
Скачиваний:
19
Добавлен:
23.04.2019
Размер:
206 Кб
Скачать
☆

Работа с классами 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");