Aracılığıyla paylaş


_getdiskfree

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

Önemli notÖnemli

Bu API yürütün uygulamalarda kullanılamaz Windows Çalışma Zamanı.Daha fazla bilgi için bkz: /zw ile desteklenmeyen crt işlevlerinin.

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

Parametreler

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

  • [çıkış]driveinfo
    A _diskfree_t yapısı sürücü hakkındaki bilgilerle doldurulur.

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ğeri 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 içinde tanımlanır.

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

Bu işlev parametreleri doğrular.driveinfo İşaretçisi NULL veya drive geçersiz bir sürücüyü belirtir bir geçersiz parametre işleyicisi açıklandığı gibi bu işlevi çağırır Parametre doğrulama.İşlev verir yürütülmesine devam etmek için izin verilip verilmediğini, EINVAL ve errno için EINVAL.Geçerli sürücü 0 26 arasındadır.A drive 0 değerini belirtir Geçerli sürücü; Bundan sonra sayıları İngiliz alfabesinin gibi harflere eşleyin 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 disk üzerindeki kullanılabilir toplam sayısı.

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

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

  • bytes_per_sector
    Her kesimdeki bayt cinsinden boyutu.

Gereksinimler

Yordamı

Gerekli başlık

_getdiskfree

<direct.h>

Daha fazla uyumluluk bilgileri 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

Yoktur. Standart c işlevi çağırmak için kullanın PInvoke. Daha fazla bilgi için bkz. Platform Çağırma örnekleri.

Ayrıca bkz.

Başvuru

Dizin denetimi