Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 959

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
Подскажите как определить количество дисков
и возможность обращения кним.

Drozdov D.V. Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Drozdov D.V. (статус: 4-ый класс)
Вопрос отправлен: 5 октября 2007, 22:03
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Drozdov D.V.!
Для получения ответа на свой вопрос, вам нужно згать две вещи.
1) дисков (точнее логических дисков) в системе не может быть больше 26 - по количеству букв.
буквы A и B по умолчанию приняты для дисководов. Тоесть, нужно проверить каждую букву, а нет ли под этим именем диска.
2) Для определения, что скрывается за буквой, поможет функция GetDriveType
вот пример

var d:char; s:string;
begin
  for d:='A' to 'Z' do begin
   case GetDriveType(PChar(d+':\')) of
   0: Result := '?';
    1: Result := 'Path does not exists';
      Drive_Removable: s := 'съемный';
      Drive_Fixed: s := 'фиксированый (внутри)';
      Drive_Remote: s := 'Удалённый';
      Drive_CDROM: s := 'CD-ROM';
      Drive_RamDisk: s := 'RAMDisk'
    else s := 'Unknown';
  end;
  Memo1.lines.add(c+' ' + s);
end;
end;

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 5 октября 2007, 23:51
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, Drozdov D.V.!
Дополнение к ответу "Вадим К".
Самый простой способ получить список всех логических дисков смотрите в Приложении.

Приложение:
  1. var
  2. S : PChar;
  3. i : integer;
  4. str : string;
  5.  
  6. begin
  7. S := '';
  8. str := '';
  9. GetLogicalDriveStrings(255, S);
  10. i := 0;
  11. repeat
  12. if S[i] = #0 then begin
  13. ShowMessage(str);
  14. Edit1.Text := str;
  15. str := ''
  16. end else
  17. str := str + S[i];
  18. // Edit1.Text := Edit1.Text + S[i];
  19. inc(i);
  20. until
  21. (S[i] = #0) and (S[i-1] = #0);
  22. end;
  23.  


Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 8 октября 2007, 12:23
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 0.

31 января 2011, 19:29: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.03 сек.