Форум: Форум C++Разное
Новые темы: 00
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Определение свободного пространства на носителе
 
 автор: AVS   (10.10.2007 в 19:00)   письмо автору
 
 

Подскажите, как можно определить сколько осталось свободного пространства на носителе, например на диске C.

  Ответить  
 
 автор: cheops   (10.10.2007 в 19:56)   письмо автору
 
   для: AVS   (10.10.2007 в 19:00)
 

Обычно эту информацию извлекают при помощи 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;
 }

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования