2Gバイト以上のディスク容量を取得するには GetDiskFreeSpaceEx 関数を使います。
ディスク容量の求め方は次のようになります。(戻る)
- 全容量と空き容量より使用容量を求める。
- ディスクの使用容量は使用容量を表示する。
- ディスクの空き容量は空き容量を表示する。
- ディスクの全体容量は全体容量を表示する。
なお、使用容量の計算は 64 ビット整数を使います。
プロトタイプ宣言
BOOL GetDiskFreeSpaceEx( LPCTSTR lpDirectoryName, // ルートパスの文字列 PULARGE_INTEGER lpFreeBytesAvailable, // 呼び出し側が利用できるバイト数 PULARGE_INTEGER lpTotalNumberOfBytes, // ディスク全体のバイト数 PULARGE_INTEGER lpTotalNumberOfFreeBytes // ディスク全体の空きバイト数 );
共用体
typedef struct union { struct { DWORD LowPart; DWORD HighPart; }; ULONGLONG QuadPart; } ULARGE_INTEGER, *PULARGE_INTEGER;
サンプル
#include <stdio.h> #include <string.h> #include <windows.h> // メイン関数 int main( void ) { TCHAR szRoot[ 16 ]; ULARGE_INTEGER i64Used; ULARGE_INTEGER i64Free; ULARGE_INTEGER i64Avail; ULARGE_INTEGER i64Total; // ドライブの設定 strcpy( szRoot, TEXT("C:\\") ); // ディスク情報の取得 GetDiskFreeSpaceEx( szRoot, &i64Free, &i64Total, &i64Avail ); // 結果表示 i64Used.QuadPart = (i64Total.QuadPart - i64Avail.QuadPart); printf( TEXT("GetDiskFreeSpaceEx()関数のテスト\n") ); printf( TEXT("\n") ); printf( TEXT("ドライブ名:%s\n"), szRoot ); printf( TEXT("\n") ); printf( TEXT("ディスクの使用容量:%12I64u バイト\n"), i64Used.QuadPart ); printf( TEXT("ディスクの空き容量:%12I64u バイト\n"), i64Avail.QuadPart ); printf( TEXT("ディスクの全体容量:%12I64u バイト\n"), i64Total.QuadPart ); return 0; }
- この関数は2Gバイトより大きいディスクに対しても正しく取得できます。
- Windows 95 のバージョンによっては利用できない場合があります。
- また64ビット整数は ULARGE_INTEGER という共用体を使います。
実行結果
GetDiskFreeSpaceEx()関数のテスト ドライブ名:C:\ ディスクの使用容量: 51576684544 バイト ディスクの空き容量: 38422589440 バイト ディスクの全体容量: 89999273984 バイト
関連記事
- ディスク情報の取得
- ディスク容量の取得(1)
- ディスク容量の取得(2)
- ドライブの種類を調べる
- 有効なドライブ名を調べる
※コメント投稿者のブログIDはブログ作成者のみに通知されます