ドライブの情報を取得する


利用可能なドライブ名を列挙するには GetLogicalDriveStrings 関数を使用します。

各ドライブのディスクの容量は GetDiskFreeSpaceEx 関数で取得できます。


Sample code
#include <windows.h>
#include <tchar.h>
#include <stdio.h>

int _tmain()
{
    TCHAR szDrv[256] = {0};
    LPTSTR pDrv = szDrv;
    UINT uDrvType;
    DWORDLONG dwlFreeBytesAvailableToCaller;
    DWORDLONG dwlTotalNumberOfBytes;
    DWORDLONG dwlTotalNumberOfFreeBytes;
    
    GetLogicalDriveStrings(255, szDrv);
    while(pDrv[0] != TEXT('\0')) {
        //ドライブ名を表示
        _tprintf(TEXT("%s\t"), pDrv);
        //ドライブタイプを表示
        uDrvType = GetDriveType(pDrv);
        switch(uDrvType) {
            case 0:
                _tprintf(TEXT("ドライブの種類が判断できません。"));
                break;
            case 1:
                _tprintf(TEXT("ルート ディレクトリが存在しません。"));
                break;
            case DRIVE_REMOVABLE:
                _tprintf(TEXT("リムーバブルディスク"));
                break;
            case DRIVE_FIXED:
                _tprintf(TEXT("ハードディスク"));
                break;
            case DRIVE_REMOTE:
                _tprintf(TEXT("ネットワークドライブ"));
                break;
            case DRIVE_CDROM:
                _tprintf(TEXT("CD-ROMドライブ"));
                break;
            case DRIVE_RAMDISK:
                _tprintf(TEXT("RAMディスク"));
                break;
            default:
                break;
        }
        _tprintf(TEXT("\t"));
        //ディスクの空き容量などを表示
        if(GetDiskFreeSpaceEx(pDrv, reinterpret_cast<PULARGE_INTEGER>(&dwlFreeBytesAvailableToCaller),
            reinterpret_cast<PULARGE_INTEGER>(&dwlTotalNumberOfBytes),
            reinterpret_cast<PULARGE_INTEGER>(&dwlTotalNumberOfFreeBytes))
        ) {
            _tprintf(TEXT("(%dMB/%dMB)"),
                static_cast<int>(dwlTotalNumberOfFreeBytes / 1024 / 1024),
                static_cast<int>(dwlTotalNumberOfBytes / 1024 / 1024));
        }
        _tprintf(TEXT("\r\n"));
        pDrv += lstrlen(pDrv) + 1;
    }
    return 0;
}

一覧メニューへ