Содержание
Нетипизированные файлы
Главное преимущество нетипизированных файлов — это высокая скорость их обработки. Открыть как нетипизированный можно и файл любой другой природы: текстовый или бинарный типизированный. В основном, это применяется в тех случаях, когда нужно перекопировать довольно большой кусок одного файла в другой без изменений.
Описание нетипизированных файлов
В разделе 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).