Compartilhar via


_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

Confira também

Controle de diretório