Пятница, 17.05.2024, 15:07
Главная Регистрация RSS
Приветствую Вас, Гость
Главная » Работа с файлами и каталогами » Информация о дисках. Часть 1
08:06

Информация о дисках. Часть 1

Список всех доступных дисков можно получить функцией GetLogicalDriveStrings, объявленной в VCL Win32 в модуле Windows следующим образом:

function
GetLogicalDriveStrings(nBufferLength: DWORD; lpBuffer:
PAnsiChar): DWORD; stdcall;

В VCL .NET в модуле Borland.VcLWindows объявление функции выглядит так:

function GetLogicalDriveStrings(nBufferLength: DWORD;
[out] lpBuffer: TBytes): DWORD;

Параметр nBufferLength определяет длину буфера lpBuffer, в который функция заносит список дисков. Функция возвращает длину буфера, которая нужна была бы для размещения всей информации. Если возвращенная длина больше nBufferLength, значит, список не удалось занести полностью. Если функция вернула 0, значит, произошла ошибка.

Список размещается в буфере в виде строк, обозначающих корневые каталоги.Например, "С:\". Отдельные строки отделяются друг от друга нулевыми символами. В конец списка заносится два нулевых символа. Обратите внимание на то, что в VCL Win32 параметр lpBuffer является указателем на строку, а в VCL .NET этот параметр — массив байтов. Каждые 2 байта соответствуют одному символу типа Char. Так что при необходимости иметь в результате вызова функции строку, ее еще надо сформировать из массива байтов. Определить тип конкретного диска можно функцией GetDriveType, которая объявлена в VCL Win32 следующим образом:

function GetDriveType(lpRootPathName: PChar): UINT; stdcall;

В VCL .NET она объявлена так:

function GetDriveType(lpRootPathName: string): UINT;

Параметр lpRootPathName — это корневой каталог диска в той форме, в которой заносит диски в список функция GetLogicalDriveStrings. Если lpRootPathName = nil (в VCL Win32), или пустой строке (в VCL .NET), то подразумевается текущий диск. Функция возвращает целое число, которое может принимать следующие значения:

DRIVE_UNKNOWNТип диска не определен
DRIVE_NO_ROOT_DIRЗаданный корневой каталог отсутствует
DRIVE_REMOVABLEСъемный диск
DRIVE_FIXEDПостоянный локальный диск
DRIVE_REMOTEУдаленный сетевой диск
DRIVE_CDROMДиск CD-ROM
DRIVE__RAMDISKВиртуальный диск в памяти

Информацию о размере диска и свободном месте на нем можно получить функцией GetDiskFreeSpaceEx, которая объявлена в VCL Win32 следующим образом:

function GetDiskFreeSpaceEx(lpDirectoryName: PChar;
var lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes;
lpTotalNumberOfFreeBytes: PLargelnteger): BOOL; stdcall;

В VCL .NET объявление выглядит так:

function GetDiskFreeSpaceEx(lpDirectoryName: string;
out lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes,
lpTotalNumberOfFreeBytes: TLargelnteger): BOOL;

Параметр lpDirectoryName — имя каталога на том диске, о котором требуется получить информацию. Это не обязательно должен быть корневой каталог. Если lpDirectoryName = nil (пустая строка), то будет получена информация о текущем диске. Параметр lpFreeBytesAvailableToCaller — свободное место (в байтах) на диске, доступное данному приложению. Параметр lpTotalNumberOfBytes — емкость диска, параметр lpTotalNumberOfFreeBytes — указатель на свободное число байтов на диске.

Перечисленные выше функции — это функции API Windows. Однако в Delphi есть более простые и удобные функции. Функция DiskSize из модуля SysUtils:

function DiskSize(Drive: Byte): Int64;

возвращает размер диска в байтах. Параметр Drive задает диск, о котором желательно получить информацию: 0 — текущий, 1 — А, 2 — В и т.д.

Функция DiskFree:

function DiskFree(Drive: Byte): Int64;

возвращает свободное место на диске в байтах. Параметр Drive имеет то же смысл, что и в функции DiskSize. Обе функции возвращают -1, если указанного диска нет. Так что, организовав цикл по номерам дисков, легко определить, сколько дисков имеется на компьютере.

Категория: Работа с файлами и каталогами | Просмотров: 2928 | Добавил: PeKpyT | Рейтинг: 0.0/0
Всего комментариев: 1
1 Александр  
0
Как проверить файловую систему на флешке?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]