_getdiskfree

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

Wichtig

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

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 erfolgreich, der Rückgabewert ist 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 Fehlerzustände, 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 ihre Parameter. Wenn der Zeiger driveinfoNULL ist, oder drive einem ungültigen Laufwerk angibt, Aufrufe dieser Funktion ein ungültiger Parameterhandler, wie in Parametervalidierung beschrieben. Wenn die weitere Ausführung zugelassen wird, gibt die Funktion EINVAL zurück und setzt errno auf EINVAL. Gültiger Laufwerksbereich von 0 bis 26. Ein drive-Wert von 0 gibt den aktuellen Laufwerk an; Danach gibt Zahlenzuordnung den Buchstaben des Alphabets englischen so, dass 1 Laufwerk A angibt, 3 Laufwerk C, z. B. an.

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

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

  • sectors_per_cluster
    Die Anzahl der Fensterbereiche in einem Cluster.

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

Anforderungen

Routine

Erforderlicher Header

_getdiskfree

<direct.h>

Weitere Informationen zur Kompatibilität 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. Mit PInvoke rufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Siehe auch

Referenz

Verzeichnissteuerung