catch(IOException exc) {

Console.WriteLine("Ошибка чтения из файла товарных запасов");

Console.WriteLine("Причина: " + exc.Message);

} finally {

dataln.Close();

} '

}

}

Выполнение этой программы может привести, например, к следующему результату.

Введите наименование для поиска: Отвертки

Отвертки: 18 штук в наличии. Цена: $1.50 за штуку.

Общая стоимость по наименованию <Отвертки>: $27.00.

Обратите внимание на то, что сведения о товарных запасах сохраняются в этой программе в двоичном формате, а не в удобной для чтения текстовой форме. Благодаря этому обработка числовых данных может выполняться без предварительного их преобразования из текстовой формы.

Обратите также внимание на то, как в этой программе обнаруживается конец файла. Методы двоичного ввода генерируют исключениеEndOf StreamExceptionпо достижении конца потока, и поэтому файл читается до тех пор, пока не будет найден искомый предмет или сгенерировано данное исключение. Таким образом, для обнаружения конца файла никакого специального механизма не требуется.

Файлы с произвольным доступом

В предыдущих примерах использовалисьпоследовательные файлы, т.е. файлы со строго линейным доступом, байт за байтом. Но доступ к содержимому файла может быть и произвольным. Для этого служит, в частности, метод Seek (), определенный в классе FileStream. Этот метод позволяет установитьуказатель положения в файле, или так называемыйуказатель файла, на любое место в файле. Ниже приведена общая форма метода Seek ():

long Seek(longoffset,SeekOriginorigin)

гдеoffsetобозначает новое положение указателя файла в байтах относительно заданного начала отсчета(origin).В качествеoriginможет быть указано одно из приведенных ниже значений, определяемых в перечисленииSeekOrigin.

Значение

Описание

SeekOrigin.Begin

Поиск от начала файла

SeekOrigin.Current

Поиск от текущего положения

SeekOrigin.End

Поиск от конца файла

Следующая операция чтения или записи после вызова методаSeek() будет выполняться, начиная с нового положения в файле, возвращаемого этим методом. Если во время поиска в файле возникает ошибка, то генерируется исключениеIOException.Если же запрос положения в файле не поддерживается базовым потоком, то генерируется исключениеNotSupportedException.Кроме того, могут быть сгенерированы и другие исключения.

В приведенном ниже примере программы демонстрируется ввод-вывод в файл с произвольным доступом. Сначала в файл записываются прописные буквы английского алфавита, а затем его содержимое считывается обратно в произвольном порядке.

// Продемонстрировать произвольный доступ к файлу.

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

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