C++遍歷磁盤驅動器


#include <stdio.h>
#include <windows.h>

typedef struct tagDRIVER
{
    // (1)磁盤盤符
    wchar_t disk;
    // (2)磁盤總的大小
    double all;
    // (3)磁盤可用空間
    double free;
    // (4)磁盤類型(是光盤、硬盤、還是移動硬盤)
    int type;
}DRIVER;

void GetDrivers()
{
    BOOL fResult;
    // 定義 磁盤消息結構體
    DRIVER dir;
    // 遍歷磁盤
    for (wchar_t d = 'A'; d <= 'Z'; d++)
    {
        // 磁盤消息結構體清0
        memset(&dir, 0, sizeof(DRIVER));
        unsigned _int64 i64FreeBytesToCaller;
        unsigned _int64 i64TotalBytes;
        unsigned _int64 i64FreeBytes;
        TCHAR szTemp[3] = { d, ':', '\0' };
        // 獲取磁盤類型
        UINT uType = GetDriveTypeW(szTemp);
        // DRIVE_UNKNOWN  無法確定驅動器類型。
        // DRIVE_NO_ROOT_DIR 根路徑無效; 例如,指定路徑上沒有安裝卷。
        // DRIVE_REMOVABLE 驅動器有可移動介質; 例如,軟盤驅動器,拇指驅動器或閃存卡讀卡器。
        // DRIVE_FIXED 驅動器有固定的媒體; 例如,硬盤驅動器或閃存驅動器。
        // DRIVE_REMOTE 該驅動器是遠程(網絡)驅動器。
        // DRIVE_CDROM 該驅動器是一個CD-ROM驅動器。
        // DRIVE_RAMDISK 驅動器是RAM磁盤。
        switch (uType)
        {
        case DRIVE_FIXED:
        {
            // 硬盤是1
            dir.type = 1;
            break;
        }
        case DRIVE_CDROM:
        {
            // 光盤是2
            dir.type = 2;
            break;
        }
        case DRIVE_REMOTE:
        {
            // 移動硬盤是3
            dir.type = 3;
            break;
        }
        default:
        {
            continue;
        }
        }
        // GetDiskFreeSpaceEx獲取與一個磁盤的組織以及剩余空間容量有關的信息
        fResult = GetDiskFreeSpaceEx(szTemp, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes, (PULARGE_INTEGER)&i64FreeBytes);
        // 盤符
        dir.disk = d;
        if (fResult)
        {
            dir.all = (double)(i64TotalBytes / 1024.0 / 1024 / 1024);
            dir.free = (double)(i64FreeBytesToCaller / 1024.0 / 1024 / 1024);
        }
        else
        {
            dir.all = 0.0;
            dir.free = 0.0;
        }
        printf("%C盤:共%.2fGB, 可用%.2fGB, 磁盤類型:%d\n", dir.disk, dir.all, dir.free, dir.type);
    }
}

int main()
{
    GetDrivers();
    getchar();
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM