Читайте также:
|
|
Классы StreamWriter и StreamReader удобны во всех случаях, когда нужно читать или записывать символьные данные (например, текст). Класс StreamReader осуществляет чтение символьных данных из потока и их преобразование. Данный класс унаследован от абстрактного класса по имени TextReader. Класс StreamWriter позволяет осуществлять запись в файл символов и строк и самостоятельно выполняет все необходимые преобразования. Данный класс наследуется от абстрактного базового класса по имени TextWriter.
Наиболее важные методы базового класса TextWriter:
Close () - метод закрывает файл и освобождает все связанные с ним ресурсы. В процессе автоматически очищается буфер (функционально эквивалентен методу Dispose());
Flush () - метод очищает все буферы для текущего файла и записывает все буферизованные данные на лежащее в основе устройство, однако, не закрывает файл.
NewLine - это свойство задает константу перевода строки. По умолчанию используется последовательность «возврат каретки»– «перевод строки»(\r\n).
Write () - метод записывает текст в символьный поток без добавления константы новой строки;
WriteLine () - метод записывает строку в поток и переходит на другую строку.
Наиболее важные методы базового класса TextReade r:
Peek() - метод возвращает следующий символ, не изменяя позицию указателя в файле.
Read() - метод считывает данные из входного потока.
ReadBlock() - считывает из входного потока указанное пользователем количество символов и записывает их в буфер, начиная с заданной позиции.
ReadLine() - считывает строку из текущего потока и возвращает ее как значение типа string. Пустая строка (null) означает конец файла (EOF).
ReadToEnd() - считывает все символы до конца потока, начиная с текущей позиции, и возвращает считанные данные как одну строку типа string.
Чтобы создать символьный поток, нужно поместить объект класса Stream (например, FileStream) "внутрь" объекта класса StreamWriter или объекта класса StreamReader. В этом случае байтовый поток будет автоматически преобразовываться в символьный.
Класс StreamWriter предназначен для организации выходного символьного потока. В нем определено несколько конструкторов. Один из них записывается следующим образом: StreamWriter(Stream stream), где параметр stream определяет имя уже открытого байтового потока. Например, создать экземпляр класса StreamWriter можно следующим образом:
StreamWriter fileOut=new StreamWriter(new FileStream("text.txt",FileMode. Create, FileAccess.Write));
Этот конструктор генерирует исключение типа ArgumentException, если поток stream не открыт для вывода, и исключение типа ArgumentNullException, если он (поток) имеет null-значение. Другой вид конструктора позволяет открыть поток сразу через обращение к файлу: StreamWriter(string name), где параметр name определяет имя открываемого файла. Например, обратиться к данному конструктору можно следующим образом: StreamWriter fileOut = new StreamWriter("c:\temp\t.txt");
Имеется еще один вариант конструктора StreamWriter:
StreamWriter (string name, bool appendFlag), где параметр name определяет имя открываемого файла; параметр appendFlag может принимать значение true, если нужно добавлять данные в конец файла, или false — если файл необходимо перезаписать. Например: StreamWriter fileOut = new StreamWriter("t.txt", true);
Теперь для записи данных в поток fileOut можно обратиться к методу WriteLine. Это можно сделать следующим образом: fileOut.WriteLine("test"); В данном случае в конец файла t.txt будет дописано слово test.
Класс StreamReader предназначен для организации входного символьного потока. Один из его конструкторов выглядит следующим образом:
StreamReader (Stream stream), где параметр stream определяет имя уже открытого байтового потока. Этот конструктор генерирует исключение типа ArgumentException, если поток stream не открыт для ввода. Например, создать экземпляр класса StreamReader можно следующим образом:
StreamReader fileln = new StreamReader(new FileStream("text.txt", true,
FileMode.Open, FileAccess.Read));
Как и в случае с классом StreamWriter у класса StreamReader есть и другой вид конструктора, который позволяет открыть файл напрямую: StreamReader (string name), где параметр name определяет имя открываемого файла. Обратиться к данному конструктору можно следующим образом: StreamReader fileln=new StreamReader ("c:\temp\t.txt");
В С# символы реализуются кодировкой Unicode. Для того чтобы можно было обрабатывать текстовые файлы, содержащие русский символы, созданные, например, в Блокноте, рекомендуется вызывать следующий вид конструктора StreamReader:
StreamReader fileln=new StreamReader ("c:\temp\t.txt", true, Encoding. GetEncoding(1251));
Параметр Encoding.GetEncoding(1251) говорит о том, что будет выполняться преобразование из кода Windows-1251 (одна из модификаций кода ASCII, содержащая русские символы) в Unicode. Encoding.GetEncoding(1251) реализован в пространстве имен System.Text.
Теперь для чтения данных из потока fileln можно воспользоваться методом ReadLine(). При этом если будет достигнут конец файла, то метод ReadLine() вернет значение null.
Дата добавления: 2015-09-10; просмотров: 130 | Поможем написать вашу работу | Нарушение авторских прав |