다음을 통해 공유


_getdiskfree

디스크 드라이브에 대 한 정보를 채우는 데 사용 하는 _diskfree_t 구조체입니다.

중요중요

이 API를 실행 하는 응용 프로그램에서 사용할 수 있는 Windows 런타임.자세한 내용은 /zw에 지원 되는 CRT 함수.

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

매개 변수

  • [in] drive
    원하는 정보에 대 한 디스크 드라이브.

  • [out] driveinfo
    A _diskfree_t 드라이브에 대 한 정보를 채워야 하는 구조입니다.

반환 값

함수가 성공 하면 0이 반환 됩니다.함수가 실패 하면 반환 값은 오류 코드입니다.값 errno 운영 체제에서 반환 되는 오류에 대해 설정 됩니다.표시 하는 오류 조건에 대 한 자세한 내용은 errno을 참조 하십시오 errno 상수.

설명

_diskfree_t Direct.h에 정의 된 구조체입니다.

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

이 함수 매개 변수의 유효성을 검사 합니다.경우는 driveinfo 포인터 NULL 또는 drive 잘못 된 드라이브 지정에 설명 된 대로 잘못 된 매개 변수 처리기를이 함수를 호출 매개 변수 유효성 검사.함수 실행을 계속 하도록 허용 된 경우, 반환 EINVAL 을 설정 하 고 errno 에 EINVAL.26 0에서 사용할 수 있는 드라이브 사이입니다.A drive 값이 0 이면 현재 드라이브;를 지정 합니다. 그 다음 부터는 숫자 영어 알파벳 등의 문자를 매핑할 드라이브 A 1을 나타내고, 3 C 드라이브를 나타냅니다.

  • total_clusters
    클러스터를 사용 하 고 사용 가능한 디스크의 총 수입니다.

  • avail_clusters
    사용 하지 않는 클러스터 된 디스크의 번호입니다.

  • sectors_per_cluster
    각 클러스터에 섹터 번호입니다.

  • bytes_per_sector
    각 섹터의 바이트 크기입니다.

요구 사항

루틴

필수 헤더

_getdiskfree

<direct.h>

자세한 호환성에 대 한 내용은 호환성.

예제

// 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 항목

해당 사항 없음. 표준 C 함수를 호출 하려면 PInvoke. 자세한 내용은 플랫폼 호출 예제을 참조하십시오.

참고 항목

참조

디렉터리 제어