![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Для любознательных. Дополнительные процедуры и функции работы с файлами
Рассмотрим некоторые процедуры работы с файлами, входящие в модуль Dos. Напомним, что для его подключения требуется указать Uses Dos. Ряд свойств файла, хранящегося на диске, кодируются так называемыми атрибутами. Атрибуты файла записываются не в сам файл, а в информационный раздел каталога, в котором хранится файл. Для хранения атрибутов отводится один байт, единица в определенном бите которого означает наличие свойства, а нуль – отсутствие. Соответствие битов и свойств показывает схема, приведенная на рисунке. 0 – Только чтение readOnly=1, 1 – Скрытый файл Hidden=2, 2 – Системный файл Sysfile=4, 3 – Метка томаVolumeID=8, 4 – Подкаталог Directory=16, 5 – Архивный файл Arhive=32. Каждому атрибуту соответствует определенная константа, равная 2k, где k – номер бита. Эти константы описаны в модуле Dos, их значения и имена приведены на схеме. В целом байт атрибутов образуется как сумма соответствующих ему констант. Установка атрибута «только чтение» приводит к невозможности изменения содержимого файла или его удаления. Скрытые файлы игнорируются некоторыми командами операционной системы, в частности, они не показываются по команде Dir. Системные файлы – файлы операционной системы Dos. Атрибут «Архивный» означает, что для этого файла не была создана резервная копия командой BackUp. Большинство файлов имеют этот атрибут. Определить атрибуты файла можно с помощью процедуры GetFAttr(MyFile, Attr); которая возвращает переменную Attr, содержащую код атрибутов файла. Например, проверить свойство «только для чтения» можно процедурами GetFAttr(MyFile, Attr); if Odd(Attr) then write ('Только для чтения') else write(' Не только для чтения'). Установка требуемых атрибутов файла производится процедурой setFAttr (MyFile, Attr); Процедуры для поиска на диске требуемых файлов используют специальный тип записи Seachrecord, определенный в модуле Dos. Запись Туре Seachrecord= record Fill: аrrау [1..21] оf bytе; Attr: bytе; Time: longint; Size: longint; Name: string[12] end; Первое поле записи – массив Fill – используется операционной системой и не должно изменяться в пользовательских программах. Содержание поля Attr – атрибуты файла, рассмотренные выше. Поле Time содержит время записи файла в упакованном виде. Упакованный вид записи времени может быть получен из даты, часов, минут, секунд и сотых долей секунды процедурой РасkTime. Size – размер файла в байтах. Name – имя файла, включая разделительную точку и расширение. Процедура FindFirst (SeachPath, Аttr, Seachresult); ищет в каталоге первый файл, удовлетворяющий заданной спецификации. Параметры SeachPath и Аttr содержат исходные данные для поиска. Возвращаемый результат поиска – Seachresult. SeachPath – строка, содержащая полное имя файла, в том числе каталог, в котором необходимо искать файл, и имя файла. Имя файла (но не путь) может содержать символы звездочки и вопросительного знака, которые, соответственно, заменяют любую последовательность символов или один произвольный символ. Если путь не приводится, поиск идет в рабочем каталоге. Следовательно, SeachPath = '*.dat' указывает на все файлы с расширением " dat" в текущем каталоге. Процедура FindNext(Seachres) употребляется только после процедуры FindFirst и продолжает последовательно поиск файлов с определенным процедурой FindFirst шаблоном. Функция FSeach(SeachString, DirList) ищет файл, заданный строкой SeachString, в заданном списке каталогов DirList. Список каталогов записывается так же, как в команде DOS Path, то есть различные каталоги разделены точкой с запятой. Результат этой функции – полное имя файла, если он найден по указанным путям. Функция FExpand(FileName), получив имя файла FileName, расширяет его до полного имени, используя для этого текущий каталог. Если в качестве FileName задано имя с полным путем, функция не изменяет его. Если задано только имя файла, то дописывается текущий каталог. Если запись FileName начинается с символа " обратный слэш", то берется текущий диск и к нему дописывается имя FileName. Если запись FileName начинается с символов "..", то берется часть текущего каталога на уровень выше. Процедура FSplit(WholeFileName, Dir, Name, Ext), получив в качестве аргумента полное имя файла WholeFileName, разделяет его на три составные части и возвращает переменные параметры Dir – каталог, Name – имя файла, Ext – расширение. Для каталога, имени файла и расширения в модуле DOS предусмотрены специальные типы – строки ограниченной длины: PathStr, NameStr, ExtStr. Обратим внимание, что типизированные переменные пишутся в файл в том виде, в каком они используются в памяти ЭВМ. Если мы пытаемся прочитать содержимое такого файла обычными средствами DOS, например, нажав F3 в Norton Commander, или непосредственно в среде Паскаль, то каждый байт этих записей воспроизведется как соответствующий символ кодовой таблицы ASCII. Например, если файл имеет байтовый тип, и в него пишутся числа 65, 66, 67, то при его чтении мы увидим АВС. Такая запись данных компактна и удобна, если создаваемые файлы читаются другими программами, для которых эта кодировка естественна. В тех случаях, когда файлы предназначены для просмотра человеком, требуется перевод данных в текстовую форму. |
Последнее изменение этой страницы: 2017-03-17; Просмотров: 309; Нарушение авторского права страницы