Сын звонит отцу на работу:
- Папа, что значит "HDD format completed".
- А это, сынок значит, что к вечеру ты - труп!!!
function DiskInDrive(Drive: Char): Boolean;
// Disk can be a floppy, CD-ROM,... var
ErrorMode: Word;
begin{ make it upper case }if Drive in ['a'..'z'] then Dec(Drive, $20);
{ make sure it's a letter }ifnot (Drive in ['A'..'Z']) thenraise EConvertError.Create('Not a valid drive ID');
{ turn off critical errors }
ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
try{ drive 1 = a, 2 = b, 3 = c, etc. }if DiskSize(Ord(Drive) - $40) = -1 then
Result := Falseelse
Result := True;
finally{ Restore old error mode }
SetErrorMode(ErrorMode);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
beginif DiskInDrive('a') = Falsethen
ShowMessage('Drive not ready');
end;
Программирование на Delphi!
Код предназначен для проверки, вставлен ли диск в накопитель. В частности, он проверяет, есть ли диск в защищенном флоппи-диске (default floppy disk drive) под буквой "A".
Разбивка кода:
Функция DiskInDrive принимает параметр Drive, представляющий букву накопителя (например, 'a', 'b' и т.д.). Она возвращает булевое значение, указывающее, есть ли диск в этом накопителе.
Внутри функции:
Конвертирует входной параметр Drive в верхний регистр с помощью Dec.
Проверяет, является ли полученная буква действительной буквой накопителя (A-Z) с помощью проверки диапазона (in ['A'..'Z']). Если нет, то функция выбрасывает ошибку.
Устанавливает режим ошибок в ignore critical errors с помощью SetErrorMode(SEM_FailCriticalErrors). Это позволяет функции продолжать выполнение даже если возникнет ошибка.
Использует функцию DiskSize (не показанная в этом коде) для определения размера диска в указанном накопителе. Если результат равен -1, то это означает, что нет диска, и функция возвращает False.
Обработчик события Button1Click вызывает функцию DiskInDrive с параметром 'a' (default floppy disk drive). Если результат равен False, то он отображает сообщение об ошибке "Drive not ready".
Альтернативное решение:
Если вы хотите проверять другие типы дисков (например, CD-ROM, USB-диски), можно модифицировать функцию для использования более надежного метода определения наличия диска. Например, можно использовать Windows API-функции GetDiskFreeSpace или FindFirstFile для проверки наличия диска.
Обновленная версия обработчика события Button1Click, использующая функцию GetDiskFreeSpace:
procedureTForm1.Button1Click(Sender:TObject);varDrive:Char;beginDrive:='a';// или любая другая буква накопителя, которую вы хотите проверитьifnotGetDiskFreeSpace(PChar(Drive+':'),nil,0)thenShowMessage('Drive not ready');end;
Код проверяет свободное пространство на указанном накопителе и отображает сообщение об ошибке, если нет диска. Обратите внимание, что эта функция доступна только на платформах Windows.
Статья описывает программный код на языке Pascal, который проверяет, вставлен ли диск в компьютер, и выводит сообщение об ошибке если диск не готов для использования.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.