|
|
|
| Подскажите, как можно определить сколько осталось свободного пространства на носителе, например на диске C. | |
|
|
|
|
|
|
|
для: 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;
} |
| |
|
|
|