Содержание
Нетипизированные файлы
Главное преимущество нетипизированных файлов — это высокая скорость их обработки. Открыть как нетипизированный можно и файл любой другой природы: текстовый или бинарный типизированный. В основном, это применяется в тех случаях, когда нужно перекопировать довольно большой кусок одного файла в другой без изменений.
Описание нетипизированных файлов
В разделе var файловые переменные, предназначенные для работы с нетипизированными файлами, описываются следующим образом:
Никакая файловая переменная не может быть задана константой.
Назначение нетипизированного файла
Содержимое этого раздела дословно повторяет всё сказанное в разделе «Назначение типизированного файла».
Открытие и закрытие нетипизированного файла
В зависимости от того, какие действия ваша программа собирается производить с открываемым файлом, возможно двоякое его открытие:
Reset(f[, size]); — открытие файла для считывания из него информации и одновременно для записи в него (если такого файла не существует, попытка открытия вызовет ошибку). Эта же команда служит для возвращения указателя на начало файла;
Rewrite(f[, size]); — открытие файла для записи в него информации; если такого файла не существует, он будет создан; если файл с таким именем уже есть, вся содержавшаяся в нём ранее информация исчезнет.
Необязательная переменная size может задать количество байтов, единовременно считываемых из нетипизированного файла или записываемых в него. По умолчанию размер таких «кусков» принимается равным 128 байт.
Закрываются нетипизированные файлы процедурой Close(f), общей для всех типов файлов.
Поиск в нетипизированном файле
Все подпрограммы, описанные в разделе «Поиск в типизированном файле», будут работать и для нетипизированного файла. Но, поскольку тип элементов нетипизированного файла не определён, то размер одного «элемента» принимается равным 128 байт (по умолчанию) или указанному в переменной size во время открытия файла.
Запись и чтение
Для осуществления записи в нетипизированный файл и считывания из него применяются две специальные процедуры BlockRead() и BlockWrite().
Процедура BlockRead(f : File; buf; count : Word [; result : Word]) предназначена для считывания из файла f нескольких элементов разом (их количество указывается в переменной count, а длина устанавливается во время открытия файла) при помощи буфера обмена данными buf. Необязательная переменная result может хранить количество элементов, фактически считанных из файла.
Процедура BlockWrite(f : File; buf; count : Word [; result : Word]) производит запись данных в нетипизированный файл при помощи буфера buf.
Подпрограммы обработки директорий
Приведём здесь также несколько стандартных процедур, осуществляющих работу с директориями, а также с файлами, но внешним относительно самих файлов образом (без их открытия).
Процедура Erase(f : File) удалит файл, связанный с файловой переменной f. Если такого файла нет, произойдёт ошибка, реакцию на которую можно отрегулировать при помощи директивы компилятора {$I} (см. лекцию 6).
Процедура Rename(f : File; s : String) даст файлу, связанному с файловой переменной f, новое имя, указанное в строке s. Если такого файла нет, произойдёт ошибка.
Процедура ChDir(s : String) сделает текущей директорию, указанную в строке s. Если такой директории нет, произойдёт ошибка.
Процедура GetDir(disk : Byte; s : String) запишет в строку s имя текущей директории на указанном диске: (0 — текущий диск, 1 — диск А , 2 — диск В и т. д.).
Процедура MkDir(s : String) создаст в текущей директории новую поддиректорию с указанным в строке s именем. Если в текущей директории уже существуют файл или директория с указанным именем, произойдёт ошибка.
Процедура RmDir(s : String) удалит пустую директорию с заданным в строке s именем. Если такой директории нет, произойдёт ошибка.
Применимость подпрограмм обработки файлов
Сведём информацию о применимости процедур и функций работы с файлами в единую таблицу.
| Текстовые | Типизированные | Нетипизированные | |
|---|---|---|---|
| Append | + | ||
| Assign | + | + | + |
| BlockRead | + | ||
| BlockWrite | + | ||
| Close | + | + | + |
| Eof | + | + | + |
| Eoln | + | ||
| FilePos | + | + | |
| FileSize | + | + | |
| Read | + | + | |
| ReadLn | + | ||
| Reset | + | + | + |
| Rewrite | + | + | + |
| Seek | + | + | |
| SeekEof | + | ||
| SeekEoln | + | ||
| Truncate | + | + | |
| Write | + | + | |
| WriteLn | + |
Замечание: Реакция на ошибку, возникающую при выполнении любой из перечисленных здесь подпрограмм, зависит от состояния директивы компилятора {$I} (см. лекцию 6).


::
::
::