_getdiskfree

Bir disk sürücüsü hakkındaki bilgileri doldurmak için kullandığı bir _diskfree_t yapısı.

Önemli notÖnemli

Bu API Windows Çalışma Zamanı, içinde yürütülen uygulamalarda kullanılmaz.Daha fazla bilgi için bkz /ZW ile desteklenmeyen CRT işlevleri.

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

Parametreler

  • [in] drive
    Bilgi almak istediğiniz disk sürücü.

  • [out] driveinfo
    A _diskfree_t sürücü hakkındaki bilgilerle doldurulan yapısı.

Dönüş Değeri

İşlev başarılı olursa, dönüş değeri sıfırdır.İşlev başarısız olursa, dönüş değeri hata kodudur.Değer errno işletim sistemi tarafından döndürülen hatalar için ayarlanır.Tarafından gösterilen hata durumları hakkında daha fazla bilgi için errno, bkz: errno Sabitleri.

Notlar

_diskfree_t Yapısı Direct.h tanımlanır.

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

Bu işlev, parametrelerini doğrular.Yoksa driveinfo işaretçisi NULL veya drive geçersiz bir sürücü belirtir açıklandığı gibi bir geçersiz parametre işleyicisi bu işlevi çağırır Parametre Doğrulama.Yürütmenin devam etmesine izin verilirse işlev EINVAL döndürür ve errno öğesini EINVAL olarak ayarlar.Geçerli sürücü 0 ile arasında 26.A drive 0 değerini belirtir geçerli sürücü; Bundan sonra numaraları harflere İngiliz alfabesinin böyle eşleme 1 A sürücüsündeki gösterir, 3 C sürücüsü vb. gösterir.

  • total_clusters
    Kümeler, kullanılan ve kullanılabilir disk üzerindeki toplam sayısı.

  • avail_clusters
    Diskteki kullanılmayan küme sayısı.

  • sectors_per_cluster
    Her kümedeki kesim sayısı.

  • bytes_per_sector
    Her kesimdeki bayt cinsinden boyutu.

Gereksinimler

Yordam

Gerekli başlık

_getdiskfree

<direct.h>

Uyumluluk hakkında daha fazla bilgi için bkz. Uyumluluk.

Örnek

// 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 Eşdeğeri

Uygulanamaz. Standart C işlevini çağırmak için PInvoke kullanın. Daha fazla bilgi için bkz. Platform Çağırma Örnekleri.

Ayrıca bkz.

Başvuru

Dizin Denetimi