Freigeben über


_getdiskfree

Verwendungsinformationen über ein Laufwerk, um eine _diskfree_t-Struktur aufzufüllen.

Wichtiger HinweisWichtig

Diese API kann nicht in den Anwendungen verwendet werden, die in Windows-Runtime ausführen.Weitere Informationen finden Sie unter CRT-Funktionen unterstützt nicht mit /ZW.

unsigned _getdiskfree( unsigned drive, struct _diskfree_t * driveinfo );

Parameter

  • [in] drive
    Das Laufwerk, für das Sie Informationen wünschen.

  • [out] driveinfo
    Eine _diskfree_t-Struktur, die mit Informationen über das Laufwerk aufgefüllt wird.

Rückgabewert

Wenn die Funktion folgt, ist der Rückgabewert null.Wenn die Funktion fehlschlägt, ist der Rückgabewert der Fehlercode.Der Wert errno wird für alle Fehler festgelegt, die das Betriebssystem zurückgegeben werden.Weitere Informationen über Fehlerbedingungen, die von errno angegeben werden, finden Sie unter errno-Konstanten.

Hinweise

Die _diskfree_t-Struktur wird in Direct.h definiert.

struct _diskfree_t { 
   unsigned total_clusters; 
   unsigned avail_clusters; 
   unsigned sectors_per_cluster; 
   unsigned bytes_per_sector; 
};

Diese Funktion überprüft seine Parameter.Wenn der driveinfo Zeiger NULL ist, oder drive ein ungültiges Laufwerk angibt, Aufrufe dieser Funktion ein ungültiger Parameterhandler, wie in Parametervalidierung beschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, gibt die Funktion EINVAL zurück und legt errno zu EINVAL fest.Gültiges Laufwerk reicht von 0 bis 26.Ein drive-Wert 0 gibt das aktuelle Laufwerk an; danach gibt Zahlenzuordnung zu den Buchstaben des englischen alphabetischen so, dass 1 Laufwerk A angibt, 3 Laufwerk C, usw. an.

  • total_clusters
    Die Gesamtanzahl von Clustern, verwendet und verfügbar, auf dem Datenträger.

  • avail_clusters
    Die Anzahl von nicht verwendeten Clustern auf dem Datenträger.

  • sectors_per_cluster
    Die Anzahl von Bereichen in jedem Cluster.

  • bytes_per_sector
    Die Größe jedes Bereichs in Bytes.

Anforderungen

Routine

Erforderlicher Header

_getdiskfree

<direct.h>

Weitere Kompatibilitätsinformation finden Sie unter Kompatibilität.

Beispiel

// 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;
      }
   }
}
  
  
  

.NET Framework-Entsprechung

Nicht zutreffend. Um die Standard-C-Funktion aufzurufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Siehe auch

Referenz

Verzeichnis-Steuerelement