_getdiskfree
Získejte informace o diskové jednotce, jako jsou celkové clustery, dostupné clustery, sektory na cluster a bajty na sektor.
Důležité
Toto rozhraní API nelze použít v aplikacích, které se spouští v prostředí Windows Runtime. Další informace najdete v tématu Funkce CRT, které nejsou v aplikacích Univerzální platforma Windows podporované.
Syntaxe
unsigned _getdiskfree(
unsigned drive,
struct _diskfree_t * driveinfo
);
Parametry
drive
Disková jednotka, pro kterou chcete informace.
driveinfo
Struktura _diskfree_t
, která se naplní informacemi o jednotce.
Vrácená hodnota
Pokud je funkce úspěšná, návratová hodnota je nula. Pokud funkce selže, návratová hodnota je kód chyby. Hodnota errno
je nastavena pro všechny chyby, které vrací operační systém. Další informace o chybových podmínkách, které jsou označeny errno
, naleznete v tématu errno
konstanty.
Poznámky
Struktura _diskfree_t
je definována v Direct.h.
struct _diskfree_t {
unsigned total_clusters; // The total number of clusters, both used and available, on the disk.
unsigned avail_clusters; // The number of unused clusters on the disk.
unsigned sectors_per_cluster; // The number of sectors in each cluster.
unsigned bytes_per_sector; // The size of each sector in bytes.
};
Tato funkce ověří své parametry. driveinfo
Pokud je NULL
ukazatel nebo drive
určuje neplatnou jednotku, vyvolá tato funkce neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, funkce vrátí EINVAL
a nastaví errno
na EINVAL
. Platné jednotky jsou v rozsahu od 0 do 26. Hodnota drive
0 určuje aktuální jednotku; potom čísla mapují na písmena anglické abecedy tak, že 1 označuje jednotku A, 3 označuje jednotku C a tak dále.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
_getdiskfree |
<direct.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// crt_getdiskfree.c
// compile with: /c
#include <windows.h>
#include <direct.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
ULONG uDriveMask = _getdrives();
for (unsigned uDrive = 1; uDrive <= 26; ++uDrive)
{
if (uDriveMask & 1)
{
struct _diskfree_t df = { 0 };
unsigned uErr = _getdiskfree(uDrive, &df);
printf("\nDrive: %c\n", uDrive + 'A' - 1);
if (uErr == 0)
{
printf("\tTotal clusters: %11u\n", df.total_clusters);
printf("\tAvailable clusters: %11u\n", df.avail_clusters);
printf("\tSectors per cluster: %11u\n", df.sectors_per_cluster);
printf("\tBytes per sector: %11u\n", df.bytes_per_sector);
}
else
{
WCHAR errMsg[80];
unsigned uLen = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,
uErr, 0, errMsg, sizeof(errMsg), NULL);
printf("%S\n", errMsg);
}
}
uDriveMask >>= 1;
}
}
Drive: C
Total clusters: 249754111
Available clusters: 160184686
Sectors per cluster: 8
Bytes per sector: 512