Классы 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");