_getdiskfree

クラスターの合計、使用可能なクラスター、クラスターあたりのセクター数、セクターあたりのバイト数など、ディスク ドライブに関する情報を取得します。

重要

この API は、Windows ランタイムで実行するアプリケーションでは使用できません。 詳細については、「ユニバーサル Windows プラットフォーム アプリでサポートされていない CRT 関数」を参照してください。

構文

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

パラメーター

drive
情報を取得するディスク ドライブを指定します。

driveinfo
ドライブに関する情報が読み込まれる _diskfree_t 構造体。

戻り値

関数が成功した場合の戻り値は 0 です。 関数が失敗した場合の戻り値はエラー コードです。 オペレーティング システムによって返されるエラーの場合、値 errno が設定されます。 でerrno示されるエラー条件の詳細については、定数を参照してくださいerrno

解説

_diskfree_t 構造体は Direct.h で定義されています。

struct _diskfree_t {
   unsigned total_clusters;      // The total number of clusters, both used and available, on the disk.
   unsigned avail_clusters;      // The number of unused clusters on the disk.
   unsigned sectors_per_cluster; // The number of sectors in each cluster.
   unsigned bytes_per_sector;    // The size of each sector in bytes.
};

この関数は、パラメーターを検証します。 ポインターがdriveinfo無効なドライブであるNULL場合、またはdrive無効なドライブを指定した場合、「パラメーターの検証」で説明されているように、この関数は無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、関数は EINVAL を返し、errnoEINVAL に設定します。 有効なドライブの範囲は、0 から 26 です。 drive 値が 0 の場合、現在のドライブを示します。それより後の数値は英文字にマップされ、1 はドライブ A、3 はドライブ C を示します (以下同様)。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

必要条件

ルーチンによって返される値 必須ヘッダー
_getdiskfree <direct.h>

互換性の詳細については、「 Compatibility」を参照してください。

// crt_getdiskfree.c
// compile with: /c
#include <windows.h>
#include <direct.h>
#include <stdio.h>

int main(int argc, char* argv[]) 
{
    ULONG uDriveMask = _getdrives();

    for (unsigned uDrive = 1; uDrive <= 26; ++uDrive) 
    {
        if (uDriveMask & 1)
        {
            struct _diskfree_t df = { 0 };
            unsigned uErr = _getdiskfree(uDrive, &df);
            printf("\nDrive: %c\n", uDrive + 'A' - 1);
            
            if (uErr == 0)
            {
                printf("\tTotal clusters:      %11u\n", df.total_clusters);
                printf("\tAvailable clusters:  %11u\n", df.avail_clusters);
                printf("\tSectors per cluster: %11u\n", df.sectors_per_cluster);
                printf("\tBytes per sector:    %11u\n", df.bytes_per_sector);
            }
            else
            {
                WCHAR errMsg[80];
                unsigned uLen = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,
                    uErr, 0, errMsg, sizeof(errMsg), NULL);
                printf("%S\n", errMsg);
            }
        }
        uDriveMask >>= 1;
    }
}
Drive: C
        Total clusters:        249754111
        Available clusters:    160184686
        Sectors per cluster:           8
        Bytes per sector:            512

関連項目

ディレクトリ コントロール