| while disk > -1 do begin

| WriteLn( 'Диск '+ch+': -> ОБЪЕМ=', disk:8,

| ' Байт; СВОБОДНО ', DiskFree( i ),' Байт' );

| Inc( i ); ch := Succ( ch ); { следующий диск }

| disk := DiskSize( i ) end; {while}

| END.

Рис. 16.6

Первая строка тела процедуры проверяет количество накопителей на гибких дисках (для применения к ним процедур DiskSize и DiskFree надо быть уверенным, что в дисководы вставлены дискеты и шторки на них задвинуты). Далее цикл While анализирует жесткие и виртуальные диски. Цикл продолжается до первого отсутствующего диска. При этом мы считаем, что первый жесткий диск имеет обозначение C: .

- 356 -

Для того чтобы получить значения размеров в килобайтах, достаточно поделить получаемые цифры на 1024, например:

disk := DiskSize( i ) div 1024

Полученное число будет ближайшим меньшим целым числом K.

Проверка самого факта существования в ПЭВМ дисковода может производиться непосредственным вызовом функции MS-DOS. Пример этого будет рассмотрен в разд. 16.5.3 «Процедура MsDos».

<p>16.4. Работа с каталогами и файлами</p>

Традиционные средства языка Паскаль предоставляют минимальные возможности при работе с внешними файлами. Обычно, это открытие, закрытие, переименование и удаление файла (две последние функции отсутствуют в стандарте языка, но имеются в системной библиотеке Турбо Паскаля). А такие специальные действия, как поиск файлов и работа с их атрибутами, реализованы лишь на уровне функций операционной системы и доступны только с помощью средств ассемблера. Некоторые из таких средств включены в виде процедур и функций в модуль DOS Турбо Паскаля (табл. 16.3).

Таблица 16.3

Процедуры и функции

Назначение

Поиск файлов (анализ каталогов)

FindFirst(Path : String; Attr : Word; VAR SR : SearchRec)

Находит первое подходящее запросу Path имя с заданным атрибутом Attr

FindNext(VAR SR : SearchRec)

Вызывается после FindFirst для нахождения дальнейших подходящих имен

FSearch(Path : PathStr; DirList : String) : PathStr

Ищет файл с именем Path в списке каталогов DirList; возвращает полное имя файла

Анализ атрибутов файлов

GetFAttr(VAR f : File; VAR FA : Word)

Считывает атрибут FA файла на диске, связанного с f

SetFAttr(VAR f : File; FA : Word)

Устанавливает атрибут файлу на диске, связанному с f

- 357 -

Синтаксический анализ имени

Fsplit(Path : PathStr; VAR Dir : DirStr; VAR Name : NameStr; VAR Ext : ExtStr)

Разбивает полное имя файла Path на его составляющие (подстроки): путь Dir, имя Name и расширение Ext

Fexpand(Path : PathStr) : PathStr

Приписывает к имени файла Path текущий маршрут

<p>16.4.1. Типы и константы модуля DOS для работы с файлами</p>

Для обеспечения работы процедур первых двух групп в модуле DOS вводятся специальные типы и константы. Так, для ввода атрибутов файла или их анализа определены константы

CONST

ReadOnly = $01; { только для чтения }

Hidden = $02; { скрытый файл }

SysFile = $04; { системный (непереносимый) }

VolumeID = $08; { метка диска }

Directory = $10; { подкаталог }

Archive = $20; { архивный (для BACKUP) }

AnyFile = $3F; { сумма всех предыдущих }

При использовании их можно складывать. Так, имя файла имеет шестнадцать вариантов композиций атрибутов ReadOnly, Hidden, SysFile, Archive; имя подкаталога может быть скрытым и т.п. Не стоит только суммировать что-либо с константой AnyFile, ибо она уже есть сумма всех предыдущих.

Для процедур FindFirst и FindNext введен тип SearchRec:

TYPE

SearchRec = RECORD

Fill : Array[1..21] of Byte; {системное поле }

Attr : Byte; {поле атрибута }

Time : LongInt; {запись времени }

Size : Longlnt; {размер файла }

Name : String[12]; {имя файла }

END;

Поля переменной этого типа содержат информацию по последнему найденному имени файла или подкаталога. Кроме того, предопределены еще две записи для поддержания работы с файлами. Для всех

- 358 -

файлов (типизированных или бестиповых), кроме текстовых, имеется системный тип:

TYPE

FileRec = RECORD

Handle : Word;

Mode : Word;

RecSize : Word;

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

Поиск

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