_getdiskfree
Usos informações sobre uma unidade de disco para preencher uma estrutura de _diskfree_t .
![]() |
---|
Este API não pode ser usado em aplicativos executados em Tempo de Execução do Windows.Para obter mais informações, consulte Funções de CRT não suportadas com /ZW. |
unsigned _getdiskfree( unsigned drive, struct _diskfree_t * driveinfo );
Parâmetros
[in] drive
A unidade de disco para o qual você deseja informação.[out] driveinfo
Uma estrutura de _diskfree_t que é preenchida com informações sobre a unidade.
Valor de retorno
Se a função for bem sucedida, o valor de retorno é zero.Se a função falhar, o valor de retorno é um código de erro.O valor errno é definido para todos os erros que são retornados pelo sistema operacional.Para obter mais informações sobre as condições de erro que são indicadas por errno, consulte errno constantes.
Comentários
A estrutura de _diskfree_t é definida em Direct.h.
struct _diskfree_t {
unsigned total_clusters;
unsigned avail_clusters;
unsigned sectors_per_cluster;
unsigned bytes_per_sector;
};
Essa função valida os seus parâmetros.Se o ponteiro de driveinfo é NULL ou drive especifica uma unidade inválida, essa função chama um manipulador de parâmetro inválido, como descrito em Validação de parâmetro.Se a execução é permitida continuar, a função retorna EINVAL e defina errno a EINVAL.As unidades válidos varia de 0 a 26.Um valor de drive de 0 especifica a unidade atual; depois disso, o mapa de números a letras do alfabeto inglês forma que 1 indica a unidade, A 3 indica a unidade C, e assim por diante.
total_clusters
O número total de conjuntos, usados, e disponíveis no disco.avail_clusters
O número de conjuntos não usado no disco.sectors_per_cluster
O número de setores em cada conjunto.bytes_per_sector
O tamanho de cada indústria em bytes.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
_getdiskfree |
<direct.h> |
Para mais informações, consulte Compatibilidadede compatibilidade.
Exemplo
// crt_getdiskfree.c
// compile with: /c
#include <windows.h>
#include <direct.h>
#include <stdio.h>
#include <tchar.h>
TCHAR g_szBorder[] = _T("======================================================================\n");
TCHAR g_szTitle1[] = _T("|DRIVE|TOTAL CLUSTERS|AVAIL CLUSTERS|SECTORS / CLUSTER|BYTES / SECTOR|\n");
TCHAR g_szTitle2[] = _T("|=====|==============|==============|=================|==============|\n");
TCHAR g_szLine[] = _T("| A: | | | | |\n");
void utoiRightJustified(TCHAR* szLeft, TCHAR* szRight, unsigned uVal);
int main(int argc, char* argv[]) {
TCHAR szMsg[4200];
struct _diskfree_t df = {0};
ULONG uDriveMask = _getdrives();
unsigned uErr, uLen, uDrive;
printf(g_szBorder);
printf(g_szTitle1);
printf(g_szTitle2);
for (uDrive=1; uDrive<=26; ++uDrive) {
if (uDriveMask & 1) {
uErr = _getdiskfree(uDrive, &df);
memcpy(szMsg, g_szLine, sizeof(g_szLine));
szMsg[3] = uDrive + 'A' - 1;
if (uErr == 0) {
utoiRightJustified(szMsg+8, szMsg+19, df.total_clusters);
utoiRightJustified(szMsg+23, szMsg+34, df.avail_clusters);
utoiRightJustified(szMsg+38, szMsg+52, df.sectors_per_cluster);
utoiRightJustified(szMsg+56, szMsg+67, df.bytes_per_sector);
}
else {
uLen = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,
uErr, 0, szMsg+8, 4100, NULL);
szMsg[uLen+6] = ' ';
szMsg[uLen+7] = ' ';
szMsg[uLen+8] = ' ';
}
printf(szMsg);
}
uDriveMask >>= 1;
}
printf(g_szBorder);
}
void utoiRightJustified(TCHAR* szLeft, TCHAR* szRight, unsigned uVal) {
TCHAR* szCur = szRight;
int nComma = 0;
if (uVal) {
while (uVal && (szCur >= szLeft)) {
if (nComma == 3) {
*szCur = ',';
nComma = 0;
}
else {
*szCur = (uVal % 10) | 0x30;
uVal /= 10;
++nComma;
}
--szCur;
}
}
else {
*szCur = '0';
--szCur;
}
if (uVal) {
szCur = szLeft;
while (szCur <= szRight) {
*szCur = '*';
++szCur;
}
}
}
Equivalência do .NET Framework
Não aplicável. Para chamar a função padrão de C, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.