Последовательный и прямой доступ к файлам
Файл – последовательная структура данных. После его открытия доступен первый компонент. Можно последовательно считывать или записывать один компонент файла за другим. Для доступа, например к 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 |
Неправильный числовой формат |
