_getdiskfree
Informations d'utilisation sur un lecteur de disque pour remplir la structure d' _diskfree_t .
Important
Cette API ne peut pas être utilisée dans les applications qui s'exécutent dans 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 d' _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 de retour est un 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 l' constantes d'errno.
Notes
La structure d' _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 d' driveinfo est NULL ou drive spécifie un lecteur incorrect, cette fonction appelle un gestionnaire de paramètre non valide, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution pour continuer, la fonction retourne EINVAL et définit errno à EINVAL.Les lecteurs valides s'étendent de 0 à 26.Une valeur d' drive de 0 spécifie le lecteur actif ; ensuite, le mappage de numéros des lettres de l'alphabet anglais tels que 1 indique que le joueur A, 3 indique que le lecteur C, et ainsi de suite.
total_clusters
Le nombre total de clusters rapides, 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 de 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é.