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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2008, 14:59   #1
AIst
Пользователь
 
Аватар для AIst
 
Регистрация: 30.06.2008
Сообщений: 58
По умолчанию узнать какие диски есь в системе

сабж.

нужно узнать какие диски есть в системе(от жестких до флешек).
желательно чтоб выходящая информация была в формате string.
AIst вне форума Ответить с цитированием
Старый 08.08.2008, 15:17   #2
Titan123
Форумчанин
 
Аватар для Titan123
 
Регистрация: 27.06.2008
Сообщений: 113
По умолчанию

есть такая функция directoryexists. можно с ней поработать.
например,
Код:
if directoryexists('H:/') then label1.caption:='диск H существует';
и так со всеми дисками
Titan123 вне форума Ответить с цитированием
Старый 08.08.2008, 15:17   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Хотя бы старым DriveComboBox1
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  disk: string;
  i: byte;
  s: string;
  UINT1: UINT;
begin
  s := '';
  for i := 1 to DriveComboBox1.Items.Count-1 do
  begin
    disk := DriveComboBox1.Items.strings[i][1] + ':\';
    UINT1:=GetDriveType(pchar(disk));
    s := s + disk + '  ';
    if UINT1=0 then s:=s+'Тип накопителя не определен.'+#13;
    if UINT1=1 then s:=s+'Корневой директорий не существует.'+#13;
    if UINT1=DRIVE_REMOVABLE then s:=s+'Накопитель может удаляться.'+#13;
    if UINT1=DRIVE_FIXED then s:=s+'Фиксированный диск(не может быть удален).'+#13;
    if UINT1=DRIVE_REMOTE then s:=s+'Удаленный накопитель(сетевой диск).'+#13;
    if UINT1=DRIVE_CDROM then s:=s+'CD-ROM.'+#13;
    if UINT1=DRIVE_RAMDISK then s:=s+'Виртуальный RAM-диск.'+#13
  end;
  showmessage(s)
end;
Или воспользоваться проверкой на существование диска (если без DriveComboBox)
Код:
function DiskExist(DISKpath:char):boolean;
var OldErrorMode:Integer;
    fp:TextFile;
begin
    result:=true;
    try
      OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
      try
        AssignFile(fp,DISKpath+':\file.dsc');
        Reset(fp);
        CloseFile(fp);
      finally
        SetErrorMode(OldErrorMode);
      end;
    except
      on E:EInOutError do
        if E.ErrorCode = 21 then
          result:=false;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  disk: string;
  i: char;
  s: string;
  UINT1: UINT;
begin
  s := '';
  for i := 'A' to 'Z do
  begin
    if not DiskExist(i) then continue;
    disk := i + ':\';
    UINT1:=GetDriveType(pchar(disk));
    ...

Последний раз редактировалось eoln; 08.08.2008 в 18:45. Причина: Уточнение к DiskExist
eoln вне форума Ответить с цитированием
Старый 08.08.2008, 15:31   #4
AIst
Пользователь
 
Аватар для AIst
 
Регистрация: 30.06.2008
Сообщений: 58
По умолчанию

o_0

спс. ща попробую.
AIst вне форума Ответить с цитированием
Старый 08.08.2008, 18:42   #5
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Вот ещё вариант:

Код:
Function DriveType(StrDisk: String): String;
Begin
Case
GetDriveType(PChar(StrDisk)) Of
DRIVE_REMOVABLE: DriveType:='Сменный'+'|';
DRIVE_FIXED: DriveType:='Жёсткий диск'+'|';
DRIVE_REMOTE: DriveType:='Remote'+'|';
DRIVE_CDROM: DriveType:='CD-ROM'+'|';
DRIVE_RAMDISK: DriveType:='Ram Диск'+'|';
Else
DriveType:='Неизвестный'+'|';
End;
End;
Function GetDrives: String;
Var
P: Integer;
This, All, C, F, CDrives: String;
Begin
C:=Chr(13);
F:=Chr(0);
SetLength(CDrives,300);
GetLogicalDriveStrings(300,PChar(CDrives));
P:=Pos(F, CDrives);
While P > 0 Do
Begin
This:=Copy(CDrives, 1, P - 1);
If Length(This) <> 3 Then
Break;
This:=UpperCase(This) + ' - ' + DriveType(This);
CDrives:=Copy(CDrives, P + 1,Length(CDrives));
P:=Pos(F, CDrives);
All:=All+This;
End;
GetDrives:=Copy(All, 1, Length(All) - 1);
End;
Procedure TForm1.Button1Click(Sender: TObject);
Begin
Memo1.Lines.Add(GetDrives);
Memo1.Text:=StringReplace(Memo1.Text,'|',#13#10,[RfReplaceAll]);
End;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать какие ячейки у StringGrid-а видимы? Sergey2 Компоненты Delphi 2 04.06.2008 13:57
Узнать какие компы в сети Dj_smart Работа с сетью в Delphi 11 01.04.2008 17:20
Как узнать с какого по какой адрес занимает процесс в системе. kalexi Win Api 2 30.03.2008 15:48
Как узнать какие поля поменялись в таблице D-mon БД в Delphi 0 03.08.2007 11:53
Какие изменения в системе нужно сделать чтобы установить ОС Linux как вторую операцио Ga-sergey Помощь студентам 7 09.04.2007 13:06