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

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

ディスク容量の取得(1)

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

指定ドライブのディスク容量を取得するには GetDiskFreeSpace 関数を使います。
ディスク容量の求め方は次のようになります。(戻る)

  1. 1クラスタ当たりのバイト数を求める。
  2. 全クラスタと空きクラスタより使用クラスタを求める。
  3. ディスクの使用容量は1クラスタ当たりのバイト数×使用クラスタで求める。
  4. ディスクの空き容量は1クラスタ当たりのバイト数×空きクラスタで求める。
  5. ディスクの全体容量は1クラスタ当たりのバイト数×全体クラスタで求める。

なお、掛け算するときには 64 ビット整数を使って計算します。

プロトタイプ宣言

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("ディスクの使用容量:%12I64u バイト\n"), ((DWORDLONG)dwUnit * dwUsed) );
    printf( TEXT("ディスクの空き容量:%12I64u バイト\n"), ((DWORDLONG)dwUnit * dwAvail) );
    printf( TEXT("ディスクの全体容量:%12I64u バイト\n"), ((DWORDLONG)dwUnit * dwTotal) );
    return 0;
}
  • この関数は2Gバイトより大きいディスクに対しては正しく取得できません。
  • 2Gバイト以上のディスクに対しては GetDiskFreeSpaceEx 関数を使います。

実行結果

GetDiskFreeSpace()関数のテスト

ドライブ名:C:\

ディスクの使用容量: 51576356864 バイト
ディスクの空き容量: 38422917120 バイト
ディスクの全体容量: 89999273984 バイト

関連記事



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

コメントを投稿

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