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

Информация о логических дисках

Delphi , Файловая система , Диски

Теперь об информации о дисках:

исчерпывающую информацию по этому поводу дает функция GetVolumeInformation,

посмотри help, там все понятно (там и серийный номер диска, и тип файловой системы, и прочее и прочее).

Вот параметры FileSysFlags:

FS_CASE_IS_PRESERVED - (при записи на диск сохраняется регистр букв в его имени)
FS_CASE_SENSITIVE - (поддерживается поиск файлов с учетом регистра букв)
FS_UNICODE_STORED_ON_DISK - (поддерживается сохранение имен файлов в UniCode)
FS_PERSISTENT_ACLS - (поддерживаются списки контроля доступа (ACL). Только для NTFS)
FS_FILE_COMPRESSION - (поддерживается сжатие файлов на уровне системы)
FS_VOL_IS_COMPRESSED - (устройство представляет собой сжатый диск)

Определение типа диска:

Code:

function GetDriveType (Drive : byte) : string;
var
   DriveLetter : Char;
   DriveType : uInt;
begin
DriveLetter := Char (Drive + $41);
DriveType := GetDriveType (PChar(DriveLetter + ':\'));
case DriveType of
0: Result := '?';
1: Result := 'Path does not exists';
Drive_Removable: Result := 'Removable';
Drive_Fixed: Result := 'Fixed';
Drive_Remote: Result := 'Remote';
Drive_CDROM: Result := 'CD-ROM';
Drive_RamDisk: Result := 'RAMDisk'
else Result := 'Unknown';
end;
end;

Может так попробовать:

Code:

procedure TMainForm.btnGetHandleClick(Sender: TObject);
var DriveHandle : HWND;
begin
case Win32Platform of
VER_PLATFORM_WIN32_NT:
   begin
     DriveHandle := CreateFile ('\\.\Scsi0:', GENERIC_READ+GENERIC_WRITE,
                               FILE_SHARE_READ+FILE_SHARE_WRITE, nil,
                               OPEN_EXISTING, 0, 0);
     if DriveHandle <> INVALID_HANDLE_VALUE then
       MessageBox (MainForm.Handle, PChar(IntToStr(DriveHandle)),
                  PChar('Here is your handle:'), MB_ICONINFORMATION)
     else
        MessageBox (MainForm.Handle, PChar('Error!'), PChar('Error'),
                    MB_ICONERROR);
   end;
VER_PLATFORM_WIN32_WINDOWS:
begin
DriveHandle := CreateFile ('\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
if DriveHandle <> INVALID_HANDLE_VALUE then
   MessageBox (MainForm.Handle, PChar(IntToStr(DriveHandle)),
               PChar('Here is your handle:'), MB_ICONINFORMATION)
else
   MessageBox (MainForm.Handle, PChar('Error!'), PChar('Error'), MB_ICONERROR);
end;
end; // case
end;

Автор Serious

Взято с Vingrad.ru http://forum.vingrad.ru

Прекрасный фрагмент кода на Delphi!

Автор, Serious, предоставил функцию GetDriveType, которая принимает букву диска в виде параметра и возвращает тип диска в виде строки.

Вот разбивка кода:

  1. Функция GetDriveType объявлена с параметром Drive типа byte, представляющим букву диска (например, 'C', 'D' и т.д.).
  2. Функция конвертирует букву диска в верхний регистр с помощью функции Char и присваивает результат переменной DriveLetter.
  3. Затем она вызывает функцию WinAPI GetDriveType, передавая строку, содержащую букву диска и двоеточие (':\'), как аргумент.
  4. Функция возвращает результат вызова функции GetDriveType в виде строки.

Функция GetDriveType реализована с помощью оператора case, чтобы маппировать возвращаемое значение из функции WinAPI к соответствующей строке типа диска.

Теперь давайте посмотрим на второй фрагмент кода, предоставленный Serious:

Эта процедура, btnGetHandleClick, предназначена для получения handles логического диска. Она использует функцию WinAPI CreateFile для открытия диска и возвращает сообщение об ошибке, если операция не удалась.

Вот что происходит в этом коде:

  1. Процедура проверяет платформу с помощью константы Win32Platform.
  2. В зависимости от платформы она вызывает либо функцию CreateFile с аргументами для системы NT, либо функцию CreateFile с аргументами для системы Windows.
  3. Она открывает диск с помощью функции CreateFile, указывая путь \\.\Scsi0: (для системы NT) или \\.\SMARTVSD (для системы Windows).
  4. Если операция успешна, она отображает сообщение об ошибке; иначе, она отображает сообщение об ошибке.

Обратите внимание, что Serious предоставляет два разных подхода для обработки платформо-специфических отличий при открытии логических дисков между системами NT и Windows.

В целом, оба фрагмента кода демонстрируют хороший уровень понимания программирования на Delphi и функций WinAPI.

О статье 'Информация о логических дисках' рассказывается о различных функциях и процедурах для работы с логическими дисками, включая получение информации о них, определение типа диска и создание handle для доступа к нему.


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

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




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


:: Главная :: Диски ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-07-12 12:32:15/0.0060617923736572/0