Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR-17.doc
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
50 Кб
Скачать
☆

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

Файл – последовательная структура данных. После его открытия доступен первый компонент. Можно последовательно считывать или записывать один компонент файла за другим. Для доступа, например к 15 элементу файла, необходимо считать предыдущие 14, затем повторно открыть файл и только потом считать требуемую компоненту.

Гораздо удобнее использовать встроенные процедуры и функции для прямого доступа к компонентам файла, что означает возможность определять позицию интересующей нас компоненты внутри файла и указывать непосредственно на неё. При прямом доступе к файлу его компоненты нумеруются от 0 до n-1 , где n – число компонентов в файле. Самый первый компонент имеет номер 0.

Функция filesize.

Функция Filesize(f) возвращает значение типа Longint, то есть число реальных компонентов в открытом файле f. Для пустого файла он вернёт 0.

Функция filepos.

Функция filepos(f) возвращает значение типа Longint – текущую позицию в открытом файле, на который указывает файловая переменная f. Если файл только что открылся, то filepos(f)=0. После прочтения последнего компонента из файла значение filepos(f) совпадает со значением filesize(f), что указывает на достижение конца файла.

Процедура seek.

Процедура seek(f, n) устанавливает указатель в открытом файле f на компонент с номером n (нумерация компонентов идёт от 0). Затем значение компоненты может быть считано.

Процедура truncate.

Процедура truncate(f) отсекает часть открытого файла, начиная с текущей компоненты и подтягивает на его месть конец файла.

Обработка ошибок ввода-вывода

Компилятор языка программирования Паскаль позволяет генерировать код программы в двух режимах: с проверкой корректности ввода-вывода и без неё. В оболочке этот режим включается при последовательном выполнении команд. Options/Compiler/I/O cheking.

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

{$I+} – режим проверки ошибок ввода-вывода включён;

{$I-} - режим проверки ошибок ввода-вывода отключён.

По умолчанию, как правило, действует режим {$I+}. Можно многократно включать и выключать режимы, создавая области с контролем ввода и без него.

При включённом режиме проверки ошибка ввода-вывода будет фатальная – программа прервётся, выдав номер ошибки [9-11].

Если убрать режим проверки, то при возникновении ошибки ввода-вывода, программа не будет останавливаться, а продолжит работу со следующего оператора. Результат операции ввода-вывода будет неопределён.

Для опроса кода ошибки лучше пользоваться специальной функцией IOResult, однако необходимо помнить, что опросить её можно только один раз после каждой операции ввода-вывода: данная функция обнуляет своё значение при каждом вызове операция IOResult возвращает целое число, соответствующее коду последней ошибки ввода-вывода. Если IOResult=0 то при вводе-выводе ошибок не было, иначе IOResult возвращает код ошибки. Некоторые коды ошибки приведены в таблице 1.

Таблица 1

Код ошибки

Описание

2

Файл не найден

3

Путь не найден

4

Слишком много открытых файлов

100

Ошибка чтения с диска

101

Ошибка записи на диск

102

Файл не связан

103

Файл не открыт

104

Файл не открыт для ввода

105

Файл не открыт для вывода

106

Неправильный числовой формат

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]