Чтение онлайн

ЖАНРЫ

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

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

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

StreamWriter(Stream поток)

где поток обозначает

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

Ниже приведен простой пример сервисной программы ввода с клавиатуры и вывода на диск набранных текстовых строк, сохраняемых в файле test. txt. Набираемый тест вводится до тех пор, пока в нем не встретится строка "стоп". Для символьного вывода в файл в этой программе используется объект класса FileStream, заключенный в оболочку класса StreamWriter.

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

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

using System; using System.10;

class KtoD {

static void Main { string str;

FileStream fout;

// Открыть сначала поток файлового ввода-вывода, try {

fout = new FileStream("test.txt", FileMode.Create);

catch(IOException exc) {

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

}

// Заключить поток файлового ввода-вывода в оболочку класса StreamWriter. StreamWriter fstr_out = new StreamWriter(fout) ;

try {

Console.WriteLine("Введите текст, а по окончании — 'стоп'."); do {

Console.Write (": "); str = Console.ReadLine;

if(str != "стоп") {

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

}

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

} catch(IOException exc) {

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

} finally {

fstr_out.Close;

}

}

}

В некоторых случаях файл удобнее открывать средствами самого класса StreamWriter. Для этого служит один из следующих конструкторов:

StreamWriter(string путь)

StreamWriter(string путь, bool append)

где путь

это имя открываемого файла, включая полный путь к нему. Если во второй форме этого конструктора значение параметра
append равно true, то выводимые данные присоединяются в конец существующего файла. В противном случае эти данные перезаписывают содержимое указанного файла. Но независимо от формы конструктора файл создается, если он не существует. При появлении ошибок ввода-вывода в обоих случаях генерируется исключение IOException. Кроме того, могут быть сгенерированы и другие исключения.

Ниже приведен вариант представленной ранее сервисной программы ввода с клавиатуры и вывода на диск, измененный таким образом, чтобы открывать выходной файл средствами самого класса StreamWriter.

// Открыть файл средствами класса StreamWriter.

using System; using System.10;

class KtoD {

static void Main { string str;

StreamWriter fstr_out = null; try {

// Открыть файл, заключенный в оболочку класса StreamWriter.

fstr_out = new StreamWriter("test.txt");

Console.WriteLine("Введите текст, а по окончании — 'стоп'."); do {

– Console.Write (": "); str = Console.ReadLine ;

if(str != "стоп") {

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 его нужно закрыть. При этом закрывается и базовый поток.

Поделиться с друзьями: