Witam! Jak pod builderem moge sprawdzic jle jest dyskow twardych(partycji) i jezeli istnieje dysk D:\ to zeby wyswietlic na np. Label1->Caption = ble??
char cDrive, szBuffer[10];
for(cDrive = 'A'; cDrive <= 'Z'; cDrive++)
{
sprintf(szBuffer, "%c:\\", cDrive);
if(GetDriveType(szBuffer) != 1)
ListBox1->Items->Add(szBuffer);
}
for(cDrive = 'A'; cDrive <= 'Z'; cDrive++)
O zgrozo! Tego to jeszcze nie było...
Użyj funkcji GetLogicalDriveStrings
Nie wiem co cię tak zgorszyło Marooned. Jest wiele rozwiazań jednego problemu, a moim sposobem bardzo łatwo uzyskać dodatkowe informacje na temat wybranego dysku.
Wrzuć na formatke: ListBox1, Memo1, Label1,... Label6. Visible wszystkich komponentow oprocz Label6 ustaw na false. Zastosuj kod:
/-----------------------------------------------------------------------------------------------
int iDysk;
char ch;
for (ch = 'A'; ch < 'Z'; ch++)
{
AnsiString sDrive = AnsiString(ch) + ":\";
iDysk = GetDriveType(sDrive.c_str());
switch (iDysk)
{
break;
case DRIVE_FIXED : ListBox1->Items->Add(AnsiString(ch));
break;
}
}
ListBox1->Items->SaveToFile("C:\dyski.txt");
Memo1->Lines->LoadFromFile("C:\dyski.txt");
int i = 0;
Label1->Caption = Memo1->Lines->Strings[i];
i = 1;
Label2->Caption = Memo1->Lines->Strings[i];
i = 2;
Label3->Caption = Memo1->Lines->Strings[i];
i = 3;
Label4->Caption = Memo1->Lines->Strings[i];
i = 4;
Label5->Caption = Memo1->Lines->Strings[i];
if(Label2->Caption == "D")
{
Label6->Caption = "dysk D istnieje";
}
ech...
no jasne, że trza użyć GetDriveType - ale zamiast tej bezsensownej pętli for użyć GetLogicalDriveStrings.
char Drives[82];
Drives[81]=0; //spis dostępnych dysków & FDD & CD
char *line;
TStringList *stacje = new TStringList;
if (GetLogicalDriveStrings(80, Drives))
{line = Drives;
//--- Zamiana stringów zakończonych '/0' i na końcu "/0/0" na StringList
do
{stacje->Add(line);
line = StrEnd(line)+1;
}while (*line!=0);
//--- Koniec zamiany
for (int i=0; i<stacje->Count; i++)
{int DrvType = GetDriveType(stacje->Strings[i].c_str());
//tu można zrobić co tam się chce na stacjach
//np. GetDiskFreeSpaceExA, GetVolumeInformation
}
to wycinek z mojego programu - polecam jednak taki sposób a nie "for (A .. Z)"