Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обзор дисков и устройств хранения данных в Delphi на Windows: пошаговое руководство

Delphi , Синтаксис , Справочник по API-функциям

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

Подход к решению проблемы

Для решения данной задачи можно использовать функцию GetDiskFreeSpaceEx, которая доступна в модуле sysutils.pas. Эта функция позволяет получить информацию о свободном, использованном и общем объеме дискового пространства для конкретного диска.

Пример функции для получения информации о диске

function DriveSpace(DriveLetter : String; var FreeSpace, UsedSpace, TotalSpace : Int64) : Boolean;
begin
  Result := SysUtils.GetDiskFreeSpaceEx(PChar(DriveLetter), UsedSpace, TotalSpace, @FreeSpace);

  if UsedSpace > 0 then
    UsedSpace := TotalSpace - FreeSpace;

  if not Result then
  begin
    UsedSpace   := 0;
    TotalSpace  := 0;
    FreeSpace   := 0;
  end;
end;

Использование функции DriveSpace

var
  FS, US, TS: Int64;
begin
  DriveSpace('C:', FS, US, TS);
  // Обработка полученных значений
end;

Перечисление доступных дисков

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

procedure ListDrivesOfType(DriveType: Integer; var Drives: TStringList);
var
  DriveMap, dMask: DWORD;
  dRoot: String;
  I: Integer;
begin
  dRoot := 'A:\';
  DriveMap := GetLogicalDrives;
  dMask := 1;

  for I := 0 to 32 do
  begin
    if (dMask and DriveMap) <> 0 then
      if GetDriveType(PChar(dRoot)) = DriveType then
      begin
        Drives.Add(dRoot[1] + ':');
      end;

    dMask := dMask shl 1;
    Inc(dRoot[1]);
  end;
end;

Типы дисков

В коде выше используется параметр DriveType, который может принимать следующие значения:

  • DRIVE_UNKNOWN = 0;
  • DRIVE_NO_ROOT_DIR = 1;
  • DRIVE_REMOVABLE = 2;
  • DRIVE_FIXED = 3;
  • DRIVE_REMOTE = 4;
  • DRIVE_CDROM = 5;
  • DRIVE_RAMDISK = 6.

Пример полного решения

procedure TAform.SomeNameICantThinkOfNow;
const
  BytesPerMB = 1048576;
var
  MyDrives: TStringList;
  I: Integer;
  FreeSpace, UsedSpace, TotalSpace: Int64;
begin
  MyDrives := TStringList.Create;
  ListDrivesOfType(DRIVE_FIXED, MyDrives);

  Memo1.Lines.Clear;

  for I := 0 to MyDrives.Count - 1 do
  begin
    FreeSpace := 0;
    UsedSpace := 0;
    TotalSpace := 0;

    if DriveSpace(MyDrives.Strings[I], FreeSpace, UsedSpace, TotalSpace) then
    begin
      FreeSpace := FreeSpace div BytesPerMB;
      UsedSpace := UsedSpace div BytesPerMB;
      TotalSpace := TotalSpace div BytesPerMB;

      Memo1.Lines.Add(Format('Drive: %s = Free Space: %dMB Used Space: %dMB Total Space: %dMB', [MyDrives.Strings[I], FreeSpace, UsedSpace, TotalSpace]));
    end;
  end;
end;

Альтернативный подход

Существует альтернативный способ получения информации о дисках с использованием библиотеки GLibWMI, которая позволяет работать с компонентами системы Windows через WMI.

Заключение

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

Создано по материалам из источника по ссылке.

Обзор дисков и устройств хранения данных в Delphi на Windows: пошаговое руководство для получения информации о доступных дисках и их свободном, использованном и общем объеме дискового пространства.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 19:13:34/0.003587007522583/0