Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: cheops   (10.10.2007 в 19:56)
Обычно эту информацию извлекают при помощи API-функции GetLogicalDriveStrings() - примерно так (фрагмент следует адаптировать под свои нужды - это из книги Архангельского и Тагина):
 DWORD Number, FileLength, VolFlags;
 char Drives[255],Buf[256];
 char SystemName[127];
 AnsiString S;
 int i ;
 PChar P ;
__int64 FreeAvailable, TotalSpace, TotalFree;

 RichEdit1->Clear();
 if (GetLogicalDriveStrings(256,Drives) > 256) exit;
 P = Drives;
 while (*P != 0)
 {
  S = "Диск " + AnsiString(P);
  i = GetDriveType(P);
  switch (i)
   {
   case 0: S = S + " неизвестного типа";
   break;
   case DRIVE_REMOVABLE: S = S + " съемный";
   break;
   case DRIVE_REMOTE:    S = S + " сетевой";
   break;
   case DRIVE_CDROM:     S = S + " CD-ROM";
   break;
   case DRIVE_RAMDISK:   S = S + " в ОЗУ";
   break;
   default: S = S + " локальный";
  }
  RichEdit1->SelAttributes->Style  = TFontStyles()<< fsBold;
  RichEdit1->Lines->Add(S);
  RichEdit1->SelAttributes = RichEdit1->DefAttributes;
  if ((i == DRIVE_FIXED) || (i == DRIVE_REMOTE))
  {
   if (GetVolumeInformation(P, Buf, 256,
                                &Number, &FileLength, &VolFlags, SystemName, 128))
    {
     RichEdit1->Lines->Add("идентификатор - " + ((AnsiString(Buf)=="") ? AnsiString("отсутствует") : AnsiString(Buf)));
     RichEdit1->Lines->Add("серийный номер - " + IntToStr(Number));
     Sysutils::GetDiskFreeSpaceEx(P, FreeAvailable,  TotalSpace,  &TotalFree);

     RichEdit1->Lines->Add("емкость - " + IntToStr(TotalSpace >> 20) +
                         " МБ (" + IntToStr(TotalSpace) + " байт)");
     RichEdit1->Lines->Add("свободно - " + IntToStr(TotalFree >> 20) +
                         " МБ (" + IntToStr(TotalFree) + " байт)");
     RichEdit1->Lines->Add("доступно - " + IntToStr(FreeAvailable >> 20) +
                         " МБ (" + IntToStr(FreeAvailable) + " байт)");
     RichEdit1->Lines->Add("система - " + AnsiString(SystemName));
     if ((VolFlags && FS_FILE_COMPRESSION) > 0 )
        RichEdit1->Lines->Add("поддерживает сжатие");
     else RichEdit1->Lines->Add("не поддерживает сжатие") ;
     RichEdit1->Lines->Add("максимальная длина имен файлов - " + IntToStr(FileLength));
     if ((VolFlags && FS_CASE_IS_PRESERVED) > 0 )
        RichEdit1->Lines->Add("сохраняет регистр имен файлов");
     if ((VolFlags && FS_PERSISTENT_ACLS) > 0)
        RichEdit1->Lines->Add("поддерживает ACL");
    }
  }
  P = P + 4;
 }


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: