Udostępnij za pośrednictwem


_getdiskfree

Używa informacji o dysku do wypełnienia _diskfree_t struktury.

Ważna uwagaWażne

Ten interfejs API nie może być stosowany w aplikacjach, które są wykonywane w Środowisko wykonawcze systemu Windows .Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane przez /ZW.

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

Parametry

  • [in] drive
    Stacji dysków, o którym chcesz uzyskać informacje.

  • [poza] driveinfo
    A _diskfree_t strukturę, która zostanie wypełniona informacje o dysku.

Wartość zwracana

Jeśli funkcja się powiedzie, wartość zwracana jest wartość zero.Jeśli funkcja zawiedzie, wartość zwracana jest kod błędu.Wartość errno jest ustawiona za jakiekolwiek błędy, które są zwracane przez system operacyjny.Aby uzyskać więcej informacji na temat błędów, które są wskazane przez errno, zobacz errno — Stałe.

Uwagi

_diskfree_t Struktury jest zdefiniowany w Direct.h.

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

Ta funkcja sprawdza poprawność swoich parametrów.Jeśli driveinfo wskaźnik jest NULL lub drive określa nieprawidłowy dysk, ta funkcja wywołuje program obsługi nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może być kontynuowane, funkcja zwraca EINVAL i ustawia errno jako EINVAL.Prawidłowe dyski z zakresu od 0 do 26.A drive wartość 0 określa bieżący dysk; po tej dacie numery mapować liter alfabetu angielskiego takich że 1 wskazuje stacji A, 3 oznacza dysk C i tak dalej.

  • total_clusters
    Całkowita liczba klastrów, zarówno używane i dostępne na dysku.

  • avail_clusters
    Liczby niewykorzystanych klastrów na dysku.

  • sectors_per_cluster
    Liczba sektorów w każdy klaster.

  • bytes_per_sector
    Rozmiar każdego sektora, w bajtach.

Wymagania

Procedura

Wymagany nagłówek

_getdiskfree

<direct.h>

Aby uzyskać więcej informacji na temat zgodności, zobacz Zgodność.

Przykład

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

Odpowiednik w programie .NET Framework

Nie dotyczy. Aby wywołać standardową funkcję C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołań platformy.

Zobacz też

Informacje

Kontrola katalogu