Работа с дисками компьютера

Говоря о дисках, первое, что нас может заинтересовать, – сколько на нем осталось свободного места. Для этого в языке Pascal реализована функция:

 

function DiskFree(Drive: Byte) : Int64;

 

Функция возвращает количество свободного места на диске в байтах. Параметр Drive требует передачи номера диска. Например, 0 = текущий, 1 = A, 2 = B, 3 = С и т. д. Если метод не в состоянии выяснить размер свободного места на диске, он возвращает –1.

Общий размер диска сообщает метод DiskSize(). Выбор номера диска аналогичен методу DiskFree().

 

functionDiskSize(Drive: Byte) : Int64;

 

При работе с дисками неоценимую поддержку программисту оказывает Windows API. Кстати, оба рассмотренных выше метода в тайне от нас пользуются услугами функции Windows API GetDiskFreeSpaceEx(). Преимущество этого метода в том, что он всего за один вызов делает то, с чем DiskFree() и DiskSize() справляются только вдвоем. А именно он возвращает количество свободных байт (FreeBytesAvailable), доступных в данный момент пользователю, и общее количество байт на диске (TotalNumberOfBytes). При этом имя диска передается в привычном виде, например C:\, а не в виде цифры, как в случае функций языка Pascal.

 

Function GetDiskFreeSpaceEx(Drive : PChar; FreeBytesAvailable, TotalNumberOfBytes,

TotalNumberOfFreeBytes : INT64):Boolean;

 

Если метод выполнился удачно, он возвратит true. Четвертый параметр функции не используется, и вместо него передавайте указатель в никуда – nil. Еще один весьма полезный метод из обоймы операционной системы Windows расскажет нам о типе диска, подключенного к системе:

 

Function GetDriveType (Drive : PChar) : Integer;

 

Метод требует указания всего одного параметра – указателя на строку с именем диска. Результат возвращается в соответствии с табл. 4.7.

Таблица 4.7. Константы типа диска

Значение Описание
DRIVE_REMOVABLE DRIVE_FIXED DRIVE_REMOTE DRIVE_CDROM DRIVE_RAMDISK Невозможно определить тип диска. Корневой каталог отсутствует. Съемный диск. Жесткий диск. Удаленный (сетевой) диск. Привод CD. Диск в оперативной памяти.

Для закрепления пройденного материала реализуем скромный пример, посвященный изучению состава дисков компьютера.

 

program ...;

{$APPTYPE CONSOLE}

uses SysUtils, Windows;

const ByteInMb=1048576; // 220, именно столько байт в 1 Мбайт

var Ch : CHAR;

iDriveType : Integer;

sDriveType, sSize, sFree : string;

AllBytes, FreeBytes : INT64;

Begin

forCh:='A' to 'Z' do

Begin

iDriveType:=GetDriveType(PChar(Ch + ':\'));

if iDriveType<=1 then Continue; //если диск не обнаружен, пропускаем шаг

Case iDriveType of

DRIVE_REMOVABLE : sDriveType:='Removable';

DRIVE_FIXED : sDriveType:='Fixed';

DRIVE_REMOTE : sDriveType:='Network';

DRIVE_CDROM : sDriveType:='CD-ROM';

DRIVE_RAMDISK : sDriveType:='RAM'

else sDriveType:='Unknown'

end;

sDriveType:='['+sDriveType+']';

if GetDiskFreeSpaceEx(PChar(Ch + ':\'),FreeBytes,AllBytes,nil)=True then

Begin

sSize:=Format('Size: %d.%d Mb',[AllBytes div ByteInMb,

AllBytes mod ByteInMb]);

sFree:=Format('Free: %d.%d Mb',[FreeBytes div ByteInMb,

FreeBytes mod ByteInMb]);

End

else sSize:=''; sFree:='';

WriteLn(Ch+':\',

sDriveType,

#9, sSize, #9,

sFree);

end;

ReadLn;

End.

Задача рассматриваемой программы – собрать сведения обо всех дисках, установленных на компьютере, выяснить их тип, размер и наличие свободного пространства. Сведения о размерах выводятся не в байтах, а в мегабайтах; для этого осуществляется деление на константу ByteInMb, содержащую количество байт в одном мегабайте (220=1048576). Сведения о диске вашего компьютера пополнит еще одна функция из пакета Windows API:

 

FunctionGetVolumeInformation(

Drive : PChar; // указатель на строку с именем диска

VolumeNameBuffer : PChar; // буфер, в который будет записано имя тома

VolumeNameSize : DWord; // размер буфера с именем тома

VolumeSerialNumber : DWord; // указатель на серийный номер тома

MaximumComponentLength : DWord; // максимальное число символов

// в имени файла

FileSystemFlags : DWord; // указатель на флаги файловой системы

FileSystemNameBuffer : PChar; // буфер с названием файловой системы

FileSystemNameSize : DWord // размер буфера с названием

// файловой системы

) : Integer;

 

В первом аргументе требуется указать имя диска (не забыв про двоеточие и слэш), о котором нам хочется получить данные. Во все остальные параметры требуется подставить соответствующие массивы и переменные, в которые функция с радостью вернет результаты анализа диска. Если все сложится успешно, метод вернет любое ненулевое значение.

 

uses SysUtils, Windows;

var VolumeNameBuffer, FileSystemNameBuffer: array [0..MAX_PATH-1] of Char;

SerNum, MaxLen, NotUsed, VolFlags : DWORD;

Begin

GetVolumeInformation(PChar('C:\'),VolumeNameBuffer,

DWord(Sizeof(VolumeNameBuffer)),

@SerNum,

MaxLen,

VolFlags,

FileSystemNameBuffer,

DWord(SizeOf(FileSystemNameBuffer)));

WriteLn('Drive C:\ information');

WriteLn('Volume label: ', VolumeNameBuffer);

WriteLn('File system: ', FileSystemNameBuffer);

WriteLn('Serial number: ', SerNum);

WriteLn('Maximum length: ', MaxLen);

ReadLn;

End.

В примере осталось нераскрытым содержание параметра FileSystemFlags. Это флаг или комбинация флагов, выявляющая некоторые особенности файловой системы, например такие, как поддержка регистра в названиях файлов, возможность сжатия тома и т. п. Более полную информацию можно получить из справочной системы.

В заключение познакомимся еще с одной функцией Windows API, которая предназначена для смены метки тома:

 

Function SetVolumeLabel(Drive, VolumeName : PChar):Boolean;

 

Название тома передается через параметр VolumeName.

 

Резюме

 

Порядок работы с файлом, а также перечень и особенности вызова методов определяются типом файла. Различают три типа файлов: текстовый, типизированный и двоичный (нетипизированный). Действия, связанные с чтением и записью данных, называются операциями ввода-вывода. Помимо операций ввода-вывода среда Delphi и операционная система Windows предоставляют методы для управления файлами и каталогами. Например, процедуры и функции, предназначенные для поиска файла, получения информации о файле, для удаления, копирования и перемещения файла.








Дата добавления: 2016-03-15; просмотров: 666;


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

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

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

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