Процедура Assign (VAR f; FileName: String) устанавливает связь между логическим файлом, описываемым файловой переменной f любого файлового типа, и конкретным файлом MS-DOS, название которого содержится в строковом параметре FileName. Иными словами, логический файл f связывается с физическим файлом FileName. Строка FileName может содержать имя файла на диске (в том числе полное имя файла), имя стандартного устройства MS-DOS ('CON', PRN' и т.п.) или пустую строку '':

Assign( f, 'file.dat' ); {связь с файлом текущего каталога }

Assign( f, 'a:\x.pas' ); {связь с файлом x.pas на диске А: }

Assign(' f, 'LPT2' ); {связь со вторым принтером ПЭВМ }

Assign( f, ' ' ); {связь со стандартным файлом, как правило файлом 'CON' }

Имя физического файла должно быть корректным и уникальным. Нельзя вставлять символы шаблонов '*' и '?' в имя файла, но можно связывать файловые переменные с еще не существующими файлами на диске (для дальнейшего их создания).

Процедура Assign не занимается анализом корректности имени файла и безоговорочно связывает заданное имя с логическим файлом f. Логический файл при этом считается закрытым, а размер буфера файла — неопределенным. Если файл f связан с некорректным именем, то это вызовет ошибку ввода-вывода лишь при попытке произвести любое действие над ним (будь то открытие файла, удаление его или что-либо другое).

Будучи однажды установленной, связь между файловой переменной f и физическим файлом сохраняется до следующего вызова Assign с той же переменной f. Это означает, что можно проделывать различные операции с файлом f, лишь единожды связав его с физическим файлом:

- 227 -

Assign( f, 'TEST.TMP' ); { установлена связь }

Rewrite( f ); { открытие файла для перезаписи }

Write( f, ...); { запись в файл f }

Close( f ); { закрытие файла (вызов необязателен) }

Reset( f ); { открытие файла для чтения }

Read( f, ...); { чтение из файла f }

Close( f ); { закрытие файла (вызов обязателен) }

Erase( f ); { удаление файла с диска }

После того как логический файл связан с физическим, его можно открыть для чтения или записи.

<p>12.5.2. Открытие файлов</p>

Процедуры открытия файлов Reset(VAR f) и Rewrite(VAR f) открывают логический файл f для чтения данных (Reset) или записи (Rewrite). Если процедуры выполняются успешн6о (открытие файла происходит без ошибки), то файл становится открытым и готов к чтению или записи первого элемента в нем. Эти же процедуры фиксируют размер буфера файла (он устанавливается автоматически, если только не был переопределен вызовом SetTextBuf для файлов типа Text или расширенной записью Reset/Rewrite для бестиповых файлов).

После открытия файла (и только после него!) становится возможным чтение или запись данных. Процедуры открытия могут применяться многократно к одном и тому же файлу. Если файл был до этого открыт, то он автоматически предварительно закрывается. Повторный вызов Reset переустановит последовательность чтения вновь на самый первый элемент файла, при этом потеря данных исключена. Но повторное обращение к Rewrite сотрет текущее содержимое файла и подготовит файл к заполнению с первого элемента. Между повторными вызовами процедур открытия не обязательно вставлять оператор закрытия файла Close. Советуем также внимательно просмотреть разд. 12.11 «Обработка ошибок ввода-вывода».

<p>12.5.3. Закрытие файлов</p>

Процедура Close(VAR f) закрывает открытый до этого логический файл f. Попытка закрыть уже закрытый (или еще не открытый) файл вызовет сбой программы. Процедура не изменяет связь между файловой переменной f и физическим файлом, но назначает им текущее состояние «закрыт». Это особенно важно для файлов, открытых для записи. Закрытие файла гарантирует сохранность и полноту заполнения. Так, фатальная ошибка в программе

- 228 -

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

Заметим, что если программа прервалась из-за ошибки и до  закрытия файла, то он все же будет создан на носителе, но содержимое последнего буфера не будет перенесено в файл. То же самое может случиться и в том случае, если вообще забыть поставить в программу вызовы Close.

Вызовы процедуры Close необходимы при завершении работы с файлами. Также необходимо закрывать открытые файлы перед их удалением (Erase) или переименованием (Rename).

<p>12.5.4. Переименование файлов</p>

Процедура Rename( VAR f; NewName : String ) позволяет переименовать физический файл на диске, связанный с логическим файлом f. Процедура выполнима только с закрытым файлом, в противном случае возникнет сбой.

Предполагается, что файловая переменная f была предварительно связана вызовом процедуры Assign с неким физическим файлом, например FileName. Вызов Rename ( f, NewName ) сменит имя физического файла с FileName на NewName. В принципе, процедура Rename выполняет ту же работу, что и команда REN в MS-DOS. Правда, в отличие от последней Rename не может содержать в строковом параметре символы '*' и '?'.

Рассмотрим фрагмент программы (рис. 12.1).

| VAR

| f : File of Real;

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

Поиск

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