function DriveExists(Drive: Byte): boolean;
begin
Result := Boolean(GetLogicalDrives and (1 shl Drive));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Drive: byte;
beginfor Drive := 0 to 25 doif DriveExists(Drive) then
ListBox1.Items.Add(Chr(Drive + $41));
end;
Here's the translation of the content into Russian:
Код, предоставленный ниже, проверяет существование определенного диска в системе и выводит список всех существующих дисков в списке.
Функция DriveExists
Эта функция принимает целочисленное параметр Drive (представляющий букву диска) и возвращает булевое значение, указывающее, существует ли данный диск или нет. Функция использует API-функцию GetLogicalDrives, чтобы получить информацию о всех логических дисках в системе, а затем сдвигает результат на величину параметра Drive, чтобы проверить, соответствует ли он какой-либо из букв диска.
Процедура Button1Click
Эта процедура вызывается при клике кнопки на форме (TForm1). Она проходит через все возможные буквы дисков (от 0 до 25) с помощью цикла for. Для каждой буквы диска она вызывает функцию DriveExists, чтобы проверить, существует ли данный диск. Если он существует, она добавляет соответствующую верхний регистр букву диска (например, "A" для диска 0) в список (ListBox1) с помощью метода Add.
Альтернативное решение
Если вы хотите более читаемый и эффективный способ достижения этого, рассмотрите использование массива строк или TStringList для хранения букв дисков вместо цикла по отдельным байтам. Например:
procedure TForm1.Button1Click(Sender: TObject);
var
Drives: TStringList;
begin
Drives := TStringList.Create();
try
for Drive := 'A' to 'Z' do
if DriveExists(Ord(Drive) - Ord('A')) then
Drives.Add(Drive);
ListBox1.Items.Assign(Drives);
finally
Drives.Free;
end;
end;
Код создает объект TStringList, проходит через буквы дисков с помощью простого цикла по строкам и добавляет каждый существующий диск в список. Наконец, он присваивает список дисков списку.
Обратите внимание, что я использовал функцию Ord, чтобы преобразовать верхний регистр букву диска (например, "A") в ее соответствующее кодовое значение ASCII (65), которое затем можно вычесть из кодового значения 'A' (64) для получения номера диска. Функция DriveExists не нужна в этом альтернативном решении, поскольку мы используем более прямой подход.
Статья описывает функцию на языке Delphi, которая проверяет существование дискеты в системе и выводит список доступных дисков в списке элементов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS