Partager via


_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é.

Voir aussi

Référence

Contrôle de répertoire