Обратите внимание на то, что в данном варианте программы переменная fin ссылки на объект класса FileStream инициализируется пустым значением. Если файл удастся открыть в конструкторе класса FileStream, то значение переменной fin окажется непустым, а иначе — оно так и останется пустым. Это очень важно, поскольку метод Close () вызывается внутри блока finally только в том случае, если значение переменной fin оказывается непустым. Подобный механизм препятствует любой попытке вызвать метод С lose () для переменной fin, когда она не ссылается на открытый файл. Благодаря своей компактности такой подход часто применяется во многих примерах организации ввода-вывода, приведенных далее в этой книге. Следует, однако, иметь в виду, что он не пригоден в тех случаях, когда ситуацию, возникающую в связи с невозможностью открыть файл, нужно обрабатывать отдельно. Так, если пользователь неправильно введет имя файла, то на экран, возможно, придется вывести приглашение правильно ввести имя файла, прежде чем входить в блок try, где осуществляется проверка правильности доступа к файлу.

В целом, порядок открытия, доступа и закрытия файла зависит от конкретного приложения. То, что хорошо в одном случае, может оказаться неприемлемым в другом. Поэтому данный процесс приходится приспосабливать к конкретным потребностям разрабатываемой программы.

Запись в файл

Длязаписи байта в файл служит метод WriteByte(). Ниже приведена его простейшая форма.

void WriteByte(bytevalue)

Этот метод выполняет запись в файл байта, обозначаемого параметромvalue.Если базовый поток не открывается для вывода, то генерируется исключение NotSupportedException. А если поток закрыт, то генерируется исключение ObjectDisposedException.

Для записи в файл целого массива байтов может быть вызван метод Write О. Ниже приведена его общая форма.

void Write(byte[] array, intoffset,intcount)

В методе Write () предпринимается попытка записать в файл количествоcountбайтов из массиваarray,начиная с элементаarray[offset].Он возвращает количество байтов, успешно записанных в файл. Если во время записи возникает ошибка, то генерируется исключениеIOException.А если базовый поток не открывается для вывода, то генерируется исключениеNotSupportedException.Кроме того, может быть сгенерирован ряд других исключений.

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

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