Иллюстрированный самоучитель по VB.NET


TextReader, TextWriter и производные классы - часть 2


/p>


Свойства Console.In и Console.Out используемые при консольном вводе-выводе, в дей-ствительности являются экземплярами классов TextReader и TextWriter. Методы Соп-sole.Setln и Console.SetOut позволяют перенаправить стандартный ввод и вывод любым классам *Reader и 'Writer соответственно.

Поскольку классы TextReader и TextWriter являются абстрактными, программы работают с конкретными реализациями StreamReader и StreamWriter. Как и в случае с классами BinaryReader и BinaryWriter, при создании объектов StreamReader и StreamWriter конструктору обычно передается существующий объект потока:

myFile = New FileStreamtfileName.FileMode.Open, FileAccess.Read)

textFile= New StreamReader(myFile)

Для получения объекта также можно воспользоваться методами класса File. Пример неявного создания объекта StreamReader при создании файлового потока продемонстрирован ниже:

Dim aStreamReader As StreamReader

aStreamReader = File.OpenText ("sample.txt")

Объекты класса StreamWriter создаются аналогичным образом:

Dim aStreamWriter As StreamWriter

aStreamWriter = File.CreateText ("test.txt")

Данные записываются в поток методами Write и WriteLine. Что касается чтения, в вашем распоряжении два способа. В наиболее распространенном варианте программа в цикле читает строки до тех пор, пока очередная прочитанная строка не окажется равной Nothing. В программе это выглядит примерно так:

Dim s As String Do

s = theStreamReader.ReadLine If Not s Is Nothing Then

' Выполнить нужные действия с s.

' Например, вызвать Console.WriteLine(s).

End If

Loop Untils Is Nothing

Также можно воспользоваться методом Peek и проверить, равен ли следующий читаемый символ -1 (признак конца файла):

Do Until theStreamReader.Peek = -1

В качестве примера использования класса TextReader ниже приводится простая процедура, предназначенная для вывода текстового файла на экран. Обратите внимание: в строках 5-17 весь важный код заключен в блок Try-Catch-Finally. В этом блоке программа пытается закрыть открытый поток независимо от того, что произошло при операциях с ним.


- Начало -  - Назад -  - Вперед -