str = str + "\r\n"; // добавить новую строку fstr_out.Write(str);

}

} while(str != "стоп");

} catch(IOException exc) {

Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message);

} finally {

if(fstr_out != null) fstr_out.Close() ;

}

}

}

Применение класса StreamReader

Длясоздания символьного потока ввода достаточно заключить байтовый поток в оболочку классаStreamReader.В классеStreamReaderопределено несколько конструкторов. Ниже приведен наиболее часто используемый конструктор:

StreamReader(Streamпоток)

гдепотокобозначает имя открытого потока. Этот конструктор генерирует исключениеArgumentNullException,еслипотококазывается пустым, а также исключениеArgumentException,еслипотокне открыт для ввода. После своего создания объект классаStreamReaderвыполняет автоматическое преобразование байтов в символы. По завершении ввода из потока типаStreamReaderего нужно закрыть. При этом закрывается и базовый поток.

В приведенном ниже примере создается простая сервисная программа ввода с диска и вывода на экран содержимого текстового файлаtest. txt.Она служит дополнением к представленной ранее сервисной программе ввода с клавиатуры и вывода на диск.

// Простая сервисная программа ввода с диска и вывода на экран,

// демонстрирующая применение класса StreamReader.

using System; using System.10;

class DtoS {

static void Main() {

FileStream fin; string s;

try {

fin = new FileStream("test.txt", FileMode.Open);

catch(IOException exc) {

Console.WriteLine("Ошибка открытия файла:\п" + exc.Message); return;

}

StreamReader fstr_in = new StreamReader(fin); try {

while((s = fstr_in.ReadLine())    !=    null)    {

Console.WriteLine(s);

}

} catch(IOException exc) {

Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message);

} finally {

fstr_in.Close();

}

}

}

Обратите внимание на то, как в этой программе определяется конец файла. Когда методReadLine() возвращает пустую ссылку, это означает, что достигнут конец файла. Такой способ вполне работоспособен, но в классеStreamReaderпредоставляется еще одно средство для обнаружения конца потока —EndOfStream.Это доступное для чтения свойство имеет логическое значениеtrue,когда достигается конец потока, в противном случае — логическое значениеfalse.Следовательно, свойствоEndOf Streamможно использовать для отслеживания конца файла. В качестве примера ниже представлен другой способ организации циклаwhileдля чтения из файла.

while(!fstr_in.EndOfStream) { s = fstr_in.ReadLine();

Console.WriteLine(s);

}

Перейти на страницу:

Похожие книги