16.3. Анализ ресурсов дисков
Модуль DOS включает в себя две функции для анализа дисков:
DiskFree( D : Word ) : LongInt
- 355 -
и
DiskSize( D : Word ) : LongInt
Обе функции возвращают длинное целое число — размер свободного пространства на диске и общую вместимость диска в байтах соответственно.
Параметром является целая переменная или целое число, указывающее на конкретный диск. Если D = 0, то анализируется текущий диск, D = 1 соответствует диску A: , D = 2 — диску B: и т.д.
Если система не может установить соответствие введенного значения параметра D конкретному диску, то функции будут возвращать значение (-1). Эту особенность можно использовать для определения характеристик подключенных к ПЭВМ дисководов (хотя это не самый эффективный способ), как это показано в программе на рис. 16.6.
| { ПРОГРАММА АНАЛИЗА ЖЕСТКИХ И ВИРТУАЛЬНЫХ ДИСКОВ }
| USES DOS;
| VAR i : Byte; disk : LongInt; { объем дисков }
| ch : Char; { буква диска }
| BEGIN
| { Анализ ячейки системной памяти ПЭВМ: }
| i := ( Mem[0:$411] shr 6 ) + 1;
| WriteLn( #10'Дисководов для гибких дисков:', i );
| i:= 3; ch:= 'С'; disk:= DiskSize(i); { начало анализа }
| if disk>0 then WriteLn('Жесткие и виртуальные диски:');
| 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».