_getdiskfree
Obtenha informações sobre uma unidade de disco, como clusters totais, clusters disponíveis, setores por cluster e bytes por setor.
Importante
Esta API não pode ser usada em aplicativos executados no Windows Runtime. Para obter mais informações, confira Funções do CRT sem suporte em aplicativos da Plataforma Universal do Windows.
Sintaxe
unsigned _getdiskfree(
unsigned drive,
struct _diskfree_t * driveinfo
);
Parâmetros
drive
A unidade de disco cujas informações você deseja.
driveinfo
Uma estrutura _diskfree_t
que será populada com informações sobre a unidade.
Valor retornado
Se a função obtiver êxito, o valor retornado será zero. Se a função falhar, o valor retornado será o código de erro. O valor errno
está definido para os erros retornados pelo sistema operacional. Para obter mais informações sobre as condições de erro indicadas por errno
, confira constantes errno
.
Comentários
A estrutura _diskfree_t
é definida em 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.
};
Essa função valida seus parâmetros. Se o driveinfo
ponteiro for NULL
ou drive
especificar uma unidade inválida, essa função invocará um manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução puder continuar, a função retornará EINVAL
e definirá errno
como EINVAL
. Intervalo de unidades válidas, de 0 a 26. Um valor de drive
igual a 0 especifica a unidade atual; depois disso, os números são mapeados para letras do alfabeto inglês, de forma que 1 indica a unidade A, 3 indica a unidade C e assim por diante.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Requisitos
Rotina | Cabeçalho necessário |
---|---|
_getdiskfree |
<direct.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
// 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