Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2015, 22:18   #1
helper999999
Пользователь
 
Регистрация: 22.02.2014
Сообщений: 45
По умолчанию Поиск диска

Возник спор с товарищем, возможно как и многие решил показаться умнее. Код следующего содержания, приведенный мною, он назвал, цитирую:
Цитата:
Гавнокод. Лучше получать все диски через апи, а не методом "была не была"
Так вот помогите, своими методами поиска фиксированных дисков на ПК, желательно, winapi, можно и с прменением asm.

Я предложил вот так:
Код:
 var 
   DType: Byte; 
   Drive: Char; 
 begin 
   for Drive := 'a' to 'z' do 
     begin 
       DType := GetDriveType(PChar(Drive+':\')); 
         case DType of 
           3: FindFile(Drive + ':\'); 
         end; 
     end; 
   CreateForm; //Вот это действия показывает формы 
 end;
helper999999 вне форума Ответить с цитированием
Старый 03.05.2015, 09:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Использую такое:
Код:
var s,e:ansiString;i:integer;
begin
  SetLength(s,100);
  GetLogicalDriveStringsA(Length(s),@s[1]);
  i:=0;      e:='';
  while (i<100)and(copy(s,i,2)<>#0#0) do begin
    if s[i]=#0 then begin inc(i); e:=e+#13#10;end;
    if s[i]<>'\' then    e:=e+s[i];
    inc(i);
  end;
  DriversList.Text:=e;
  SetLength(s,0);
  Result:=DriversList.Count-1;
end;
Друг твой не прав. Если твой пример тебя устраивает и решает поставленные ему задачи - значит то не быдлокод. Единственный минус, который можно усмотреть - перебор всех дисков, даже не существующих. Т.е. де-факто программа работает медленее, чем получение списка актуальных дисков.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.05.2015, 07:56   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Я вот так флешки получал
Код:
var
  Disks : TStringDynArray;
  i : Byte;
begin
  ComboBox1.Clear;
  Disks := TDirectory.GetLogicalDrives;
  for i := 0 to High (Disks) do
    begin
      if (UpperCase(Disks[i][1]) = 'A') or
         (UpperCase(Disks[i][1]) = 'A') then
        Continue;
      if GetDriveType(PChar(Disks[i])) = DRIVE_REMOVABLE then
        ComboBox1.Items.Add(Disks[i]);
    end;
  if ComboBox1.Items.Count > 0 then
    ComboBox1.ItemIndex := 0 else
    ComboBox1.Text := 'Flash drives not found!';
end;
Чтобы получить харды измените один параметр, вернее сравнение.
Подробнее тут GetDriveType
FaTaL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема D диска Аделия Ахметова Помощь студентам 5 24.05.2013 16:53
Анализ диска Дако Общие вопросы Delphi 1 18.03.2013 22:52
загрузка с диска Onni Компьютерное железо 4 17.03.2012 00:21
Загрузка с диска. krokusfs Безопасность, Шифрование 1 31.05.2010 23:39
Дефрагментация диска Viteef Софт 8 06.12.2007 23:33