Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Pascal.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
1 Мб
Скачать
☆

Занятие № 32. Некоторые процедуры и функции модуля dos.

На этом занятии мы более детально познакомимся с процедурами, функциями и типами ещё одного модуля интегрированного в стандартный файл системы Turbo Pascal turbo.tpl. Эта библиотека носит имя DOS, так как обеспечивает доступ к некоторым функциям дисково-операционной системы. Не забудем, первым делом, подключить эту библиотеку в описательной части программы:

uses dos;

Первые две процедуры позволят вам удалить и переименовать существующий файл. Для удаления используется процедура:

erase(<файловая переменная>);

Соответственно, первым делом следует ассоциировать файловую переменную с реальным файлом, а затем производить удаление:

assign(<файловая переменная>,<путь и имя файла>);

erase(<файловая переменная>);

Следует помнить, что невозможно удаление открытого файла.

Еще одна процедура, действующая аналогичным образом, позволит вам переименовать файл:

rename(<файловая переменная>, <новое имя файла>);

Теперь рассмотрим две функции, позволяющие определить информационный объем общего и занятого пространства соответственно:

DiskSize(<код устройства>): Longint;

Функция возвращает полный информационный объём диска в byte. <код устройства> - это число, где 0 – устройство по умолчанию, 1 – диск A, 2 – диск B и т.д. Работа этой функции ограничена типом результата возвращаемого ею. Не сложные подсчёты покажут, что вам не удастся определить правильный информационный объём диска превышающего 2 Gb. Например, если мы хотим увидеть информационный объём диска D в Mb, то можно воспользоваться следующей строкой:

WriteLn(DiskSize(4)/1024/1024:0:2);

Ещё одна функция возвращает объём свободного дискового пространства:

DiskFree(<код устройства>): Longint;

Часто также встречается задача просмотра содержимого того, либо иного каталога. Решается она с помощью следующих двух процедур. Сначала следует воспользоваться процедурой:

FindFirst(<путь>; <атрибуты файлов>; <переменная типа SearchRec>);

которая позволяет найти первый удовлетворяющий требованиям файл из списка файлов. У неё следующие параметры:

<путь> - путь, по которому осуществляется поиск файлов, <атрибуты файлов> - сумма атрибутов которыми должны быть наделены искомые файлы:

Зарезервированная константа

Обозначение

Шестнадцатеричное значение

ReadOnly

Только для чтения

$01

Hidden

Скрытый

$02

SysFile

Системный

$04

VolumeID

Метка тома

$08

Directory

Каталог

$10

Archive

Архивный

$20

AnyFile

Все файлы, метки тома и каталоги

$3F

Последний параметр – это переменная куда помещаются результаты поиска. Она должна быть обязательно зарегистрированного в модуле DOS типа SearchRec, который выглядит следующим образом:

type SearchRec = record

Fill: array[1..21] of Byte;

Attr: Byte;

Time: Longint;

Size: Longint;

Name: array[0..12] of Char;

end;

Fill – поле содержит служебную информацию DOS, Attr – код атрибутов найденного первого файла, Time – дата и время создания файла в специальном упакованном 4‑х байтовом формате, Size – информационный объём в byte, Name – имя файла.

Для распаковки упакованных даты и времени используется процедура:

UnpackTime(<переменная типа Longint>;<переменная типа DateTime>);

Тип DateTime также описан в модуле DOS и имеет следующую структуру:

type DateTime = record

Year, Month, Day, Hour, Min, Sec: Word;

end;

О назначении этих полей нетрудно догадаться.

Для последующего поиска файлов с описанными в FindFirst параметрами используется процедура:

FindNext(<переменная типа SearchRec>);

Возникает вопрос: когда закончится список найденных файлов? Чтобы отследить эту ситуацию следует обратиться к переменной:

DosError: integer

Если содержимое переменной равно 0, то можно успешно продолжать поиск, если отлично от нуля, то возникла ошибка – файлы в списке исчерпаны (2- файл не найден, 3 – путь не найден и т.д.) и именно в этом случае следует закончить поиск. Для лучшего понимания приведём фрагмент программы, позволяющий вывести на экран все файлы и каталоги корневого каталога диска C: с указанием года их создания:

var FindRes: SearchRec;

TimeRes: DateTime;

begin

Clrscr;

FindFirst('C:\*.*', AnyFile, FindRes);

while DosError = 0 do begin

UnpackTime(FindRes.Time, TimeRes);

Writeln(FindRes.Name:12, TimeRes.Year:5);

FindNext(FindRes);

end;

readkey;

end.

Следующие две процедуры достаточно просты. Они позволяют получить информацию о системной дате и системном времени:

GetDate(<год>,<месяц>,<день>,<день недели>);

GetTime(<часы>,<минуты>,<секунды>,<сотые доли секунд>);

Все параметры являются переменным типа Word в которые и возвращаются указанные значения. Дата возвращается в американском формате, поэтому 0 – соответствует воскресенью, 1 – понедельнику и т.д.

Обратную операцию по установки ваших системной даты и времени позволяют произвести процедуры:

SetDate(<год>,<месяц>,<день>);

SetTime(<часы>,<минуты>,<секунды>,<сотые доли секунд>);

Контрольные вопросы:

1.

Задание: