プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

ディスク情報の取得

2007年09月24日 01時07分39秒 | ディスク関連

指定ドライブのディスク情報を取得するには GetDiskFreeSpace 関数を使います。(戻る)

プロトタイプ宣言

BOOL GetDiskFreeSpace(
    LPCTSTR     lpRootPathName,             // ルートパスの文字列
    LPDWORD     lpSectorsPerCluster,        // クラスタ当たりのセクタ数
    LPDWORD     lpBytesPerSector,           // セクタ当たりのバイト数
    LPDWORD     lpNumberOfFreeClusters,     // 空きクラスタ数
    LPDWORD     lpTotalNumberOfClusters     // 全クラスタ数
);

サンプル

#include <stdio.h>
#include <string.h>
#include <windows.h>

// メイン関数
int main( void )
{
    TCHAR   szRoot[ 16 ];
    DWORD   dwSector;
    DWORD   dwBytes;
    DWORD   dwAvail;
    DWORD   dwTotal;
    DWORD   dwUsed;
    DWORD   dwUnit;
    
    // ドライブの設定
    strcpy( szRoot, TEXT("C:\\") );
    // ディスク情報の取得
    GetDiskFreeSpace( szRoot, &dwSector, &dwBytes, &dwAvail, &dwTotal );
    // 結果表示
    dwUsed = (dwTotal - dwAvail);
    dwUnit = (dwSector * dwBytes);
    printf( TEXT("GetDiskFreeSpace()関数のテスト\n") );
    printf( TEXT("\n") );
    printf( TEXT("ドライブ名:%s\n"), szRoot );
    printf( TEXT("\n") );
    printf( TEXT("クラスタ当たりのセクタ数:%4lu 個\n"), dwSector );
    printf( TEXT("1セクタ当たりのバイト数:%4lu 個\n"), dwBytes );
    printf( TEXT("クラスタ当たりのバイト数:%4lu 個\n"), dwUnit );
    printf( TEXT("\n") );
    printf( TEXT("使用クラスタ数:%10lu 個\n"), dwUsed );
    printf( TEXT("空きクラスタ数:%10lu 個\n"), dwAvail );
    printf( TEXT("全体クラスタ数:%10lu 個\n"), dwTotal );
    return 0;
}
  • この関数は2Gバイトより大きいディスクに対しては正しく取得できません。
  • 2Gバイト以上のディスクに対しては GetDiskFreeSpaceEx 関数を使います。

実行結果

GetDiskFreeSpace()関数のテスト

ドライブ名:C:\

クラスタ当たりのセクタ数:   8 個
1セクタ当たりのバイト数: 512 個
クラスタ当たりのバイト数:4096 個

使用クラスタ数:  12591882 個
空きクラスタ数:   9380597 個
全体クラスタ数:  21972479 個

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ページング・ファイル容量の... | トップ | ディスク容量の取得(1) »
最新の画像もっと見る

コメントを投稿

ディスク関連」カテゴリの最新記事