指定ドライブのディスク情報を取得するには 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 個
関連記事
- ディスク情報の取得
- ディスク容量の取得(1)
- ディスク容量の取得(2)
- ドライブの種類を調べる
- 有効なドライブ名を調べる
※コメント投稿者のブログIDはブログ作成者のみに通知されます