Для любознательных. Дополнительные процедуры и функции работы с файлами

Рассмотрим некоторые процедуры работы с файлами, входящие в модуль 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, то при его чтении мы увидим АВС. Такая запись данных компактна и удобна, если создаваемые файлы читаются другими программами, для которых эта кодировка естественна. В тех случаях, когда файлы предназначены для просмотра человеком, требуется перевод данных в текстовую форму.








Дата добавления: 2015-05-16; просмотров: 958;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.