Udostępnij za pośrednictwem


_getdiskfree

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

Ważna uwagaWażne

Ten interfejs API nie można używać w aplikacji, których wykonywanie w Środowisko wykonawcze systemu Windows.Aby uzyskać więcej informacji, zobacz CRT funkcje nie obsługiwane przez /ZW.

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

Parametry

  • [in]drive
    Dysk, dla którego chcesz uzyskać informacje.

  • [Brak]driveinfo
    A _diskfree_t strukturę, która zostanie wypełniona informacje o stacji dysków.

Wartość zwracana

Jeśli funkcja się powiedzie, zwracana wartość jest zero.Jeśli ta funkcja zawiedzie, wartość zwracana jest kodem błędu.Wartość errno jest ustawiona występują błędy, które są zwracane przez system operacyjny.Aby uzyskać więcej informacji na temat warunków błędów, które są wskazywane przez errno, zobacz errno stałych.

Uwagi

_diskfree_t Struktura jest zdefiniowana w Direct.h.

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

Ta funkcja sprawdza poprawność jego parametry.Jeśli driveinfo wskaźnik jest NULL lub drive określa nieprawidłowy dysk, funkcja ta wywołuje funkcję obsługi nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może w dalszym ciągu, funkcja zwraca EINVAL i ustawia errno do EINVAL.Dyski prawidłowy zakres od 0 do 26.A drive wartość 0 określa bieżący dysk; Po tej dacie numery mapować litery alfabetu angielskiego takich że 1 wskazuje stacji A, 3 oznacza dysk C i tak dalej.

  • total_clusters
    Całkowita liczba klastrów, dostępne na dysku i zajęte.

  • avail_clusters
    Liczbę nieużywanych klastrów na dysku.

  • sectors_per_cluster
    Liczba sektorów każdego klastra.

  • bytes_per_sector
    Rozmiar każdego sektora, w bajtach.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

_getdiskfree

<direct.h>

Informacji dotyczących 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ływać funkcji C standardowej, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Platforma wywołać przykłady.

Zobacz też

Informacje

Formant katalogu