指定ドライブのディスク容量を取得するには GetDiskFreeSpace 関数を使います。
ディスク容量の求め方は次のようになります。(戻る)
- 1クラスタ当たりのバイト数を求める。
- 全クラスタと空きクラスタより使用クラスタを求める。
- ディスクの使用容量は1クラスタ当たりのバイト数×使用クラスタで求める。
- ディスクの空き容量は1クラスタ当たりのバイト数×空きクラスタで求める。
- ディスクの全体容量は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 バイト
関連記事
- ディスク情報の取得
- ディスク容量の取得(1)
- ディスク容量の取得(2)
- ドライブの種類を調べる
- 有効なドライブ名を調べる
※コメント投稿者のブログIDはブログ作成者のみに通知されます