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

Проверка наличия физического диска по его номеру в Delphi 7

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

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

Описание задачи

В операционной системе Windows диски нумеруются начиная с 0, и это отображение можно увидеть в "Управлении компьютером". Диски могут быть физически присутствовать в системе, но не иметь разделов или они могут быть не смонтированы. Задача состоит в том, чтобы написать функцию, которая будет проверять наличие диска по его номеру без необходимости наличия на нем разделов или смонтированных томов. Функция должна работать корректно на любом компьютере с Windows версии XP и выше и выполняться за время менее одной секунды.

Попытка решения

Сначала было предложено перечисление дисков от 'A' до 'Z' с использованием функций GetDriveType и DeviceIoControl с кодами IOCTL_STORAGE_GET_DEVICE_NUMBER, DiskSize и DiskFree. Однако такой подход не дает результатов, если на диске не имеется смонтированных томов.

Подтвержденный ответ

Используйте функцию CreateFile для открытия файла с именем "\\.\PhysicalDriveX", где X - это номер интересующего диска, и проверьте, удастся ли открыть файл. Даже если открытие файла не удастся, можно проверить, является ли ошибка результатом отсутствия устройства или невозможности доступа к нему, что предполагает его физическое наличие в системе.

Комментарии и уточнения

В случае возврата CreateFile значения INVALID_HANDLE_VALUE, необходимо использовать функцию GetLastError для получения дополнительной информации об ошибке. В документации Microsoft указано, что можно проверить ошибки типа ERROR_PATH_NOT_FOUND и ERROR_FILE_NOT_FOUND, которые помогут определить причину возникновения ошибки.

Пример кода на Object Pascal (Delphi)

uses
  SysUtils, Winapi.Windows;

function IsDiskPresent(const DiskNumber: Integer): Boolean;
var
  hFile: THandle;
  LastError: DWORD;
begin
  Result := False;
  hFile := CreateFile(PChar(Format('\\.\PhysicalDrive%d', [DiskNumber])), 
    GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, 
    nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if hFile = INVALID_HANDLE_VALUE then
  begin
    LastError := GetLastError;
    Result := (LastError <> ERROR_FILE_NOT_FOUND);
  end
  else
  begin
    Result := True;
    CloseHandle(hFile);
  end;
end;

Функция IsDiskPresent принимает номер диска в качестве параметра и возвращает True, если диск присутствует, и False в противном случае. Обратите внимание, что для работы данной функции необходимо иметь соответствующие права доступа.

Заключение

Таким образом, использование функции CreateFile в сочетании с проверкой кода ошибки через GetLastError является эффективным способом проверки наличия физического диска в системе под управлением Windows, начиная с XP, с использованием среды разработки Delphi 7.

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

Задача заключается в разработке функции на Delphi 7 для проверки наличия физического диска в операционной системе Windows по его номеру, независимо от наличия на нем разделов или смонтированных томов.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 20:52:22/0.0017969608306885/0