_getdiskfree
Utilise des informations sur le lecteur de disque pour remplir une structure _diskfree_t.
Important
Cette API ne peut pas être utilisée dans les applications qui s'exécutent dans le Windows Runtime.Pour plus d'informations, consultez Fonctions CRT non prises en charge avec /ZW.
unsigned _getdiskfree(
unsigned drive,
struct _diskfree_t * driveinfo
);
Paramètres
[in] drive
Le lecteur de disque pour lequel vous souhaitez des informations.[out] driveinfo
Une structure _diskfree_t qui sera remplie avec les informations sur le lecteur.
Valeur de retour
Si la fonction réussit, la valeur de retour est zéro. Si la fonction échoue, la valeur retournée est le code d'erreur. La valeur errno est définie pour toutes les erreurs retournées par le système d'exploitation. Pour plus d'informations sur les conditions d'erreur qui sont indiquées par errno, consultez errno, constantes.
Notes
La structure _diskfree_t est définie dans Direct.h.
struct _diskfree_t {
unsigned total_clusters;
unsigned avail_clusters;
unsigned sectors_per_cluster;
unsigned bytes_per_sector;
};
Cette fonction valide ses paramètres. Si le pointeur driveinfo estNULL ou drive spécifie un lecteur non valide, cette fonction appelle un gestionnaire de paramètre non valide, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, la fonction retourne EINVAL et définit errno à la valeur EINVAL. L'étendue des lecteurs valides va de 0 à 26. Une valeur drive de 0 spécifie le lecteur activé; après cela, les nombrs correspondent aux lettres de l'alphabet anglais de sorte que 1 indique le lecteur A, 3 indique le lecteur C, et ainsi de suite.
total_clusters
Le nombre total de clusters, utilisés et disponibles, sur le disque.avail_clusters
Le nombre de clusters inutilisés sur le disque.sectors_per_cluster
Le nombre de secteurs dans chaque cluster.bytes_per_sector
La taille de chaque secteur en octets.
Configuration requise
Routine |
En-tête requis |
---|---|
_getdiskfree |
<direct.h> |
Pour plus d'informations sur la compatibilité, consultez Compatibilité.
Exemple
// 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;
}
}
}
Équivalent .NET Framework
Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de code non managé.