_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
を返し、errno
を EINVAL
に設定します。 有効なドライブの範囲は、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