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

Проверка, доступно ли устройство без всяких окошек об ошибках

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



Автор: Mystic
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Проверка, доступно ли устройство без всяких окошек об ошибках.

Зависимости: Windows
Автор:       Mystic, mystic2000@newmail.ru, ICQ:125905046, Харьков
Copyright:   Mystic
Дата:        6 марта 2003 г.
***************************************************** }

function IsDiskInDrive(Drive: string): Boolean;
var
  ErrMode: Cardinal;
  VolName: array[0..255] of Char;
  FS: array[0..255] of Char;
  MaxComSize: Cardinal;
  Flags: Cardinal;
begin
  ErrMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    Result := GetVolumeInformation(PChar(Drive), VolName, SizeOf(VolName), nil,
      MaxComSize, Flags, FS, SizeOf(FS));
  finally
    SetErrorMode(ErrMode);
  end;
end;

Пример использования:

if not IsDiskInDriver('A:') then
  raise Exception.Create('А дискеты-то нет :(');

Переведенный текст:

Код - функция Delphi под именем IsDiskInDrive, которая проверяет доступность заданного диска. Функция использует API GetVolumeInformation для получения информации о указанном диске, а затем возвращает булевое значение, указывающее на доступность диска.

Разбор кода:

  1. Переменная ErrMode устанавливается в SEM_FAILCRITICALERRORS, что позволяет программе обрабатывать критические ошибки и продолжать выполнение.
  2. Используется блок try...finally для обеспечения того, что режим ошибок будет сброшен до его исходного состояния после завершения функции.
  3. Внутри блока try вызывается API GetVolumeInformation с параметром пути к диску. Функция получает информацию о указанном диске, включая имя тома, тип файловой системы и т.д.
  4. Если вызов GetVolumeInformation fails или возвращает код ошибки, функция устанавливает переменную Result в False, указывая на то, что диск недоступен.
  5. Блок finally сбрасывает режим ошибок до его исходного состояния.

Пример использования демонстрирует, как использовать эту функцию:

if not IsDiskInDriver('A:') then
  raise Exception.Create('А дискеты-то нет :(');

Это код проверяет доступность диска 'A:'. Если он недоступен, то возникает исключение с сообщением о том, что дискет не доступна.

В целом, эта функция предоставляет удобный способ проверки доступности конкретного диска в Windows-окружении.

Альтернативное решение:

Если вам нужно обрабатывать ошибки differently или хотите иметь больше гибкости, вы можете рассмотреть использование блоков try...except вместо try...finally. Это позволяет поймать конкретные исключения и обработать их соответствующим образом. Например:

function IsDiskInDrive(Drive: string): Boolean;
begin
  ErrMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    Result := GetVolumeInformation(PChar(Drive), VolName, SizeOf(VolName), nil,
      MaxComSize, Flags, FS, SizeOf(FS));
  except
    on E: Exception do
       // Обрабатываем исключение здесь
  finally
    SetErrorMode(ErrMode);
  end;
end;

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

Статья 'Проверка, доступно ли устройство без всяких окошек об ошибках' описывает функцию IsDiskInDrive для проверки доступности диска на конкретном устройстве в Windows.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 00:54:34/0.0034010410308838/0