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;
}

 

转载于:https://www.cnblogs.com/duxie/p/11204081.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值