遍历磁盘信息

本文介绍了一种方法,通过Windows API获取硬盘驱动器的详细信息,包括名称、类型、描述、卷序列号、文件系统等,并展示了如何利用这些信息进行磁盘空间管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//.h

#pragma once
#include <windows.h>
#include <list>
using std::list;
typedef struct _DRIVE_INFO 
{
    WCHAR szName[MAX_PATH];           // 名称
    WCHAR szDriveTitle[32];           // 驱动器名称
    UINT  uDriveType;                 // 驱动器类型
    WCHAR szDriveTypeDescription[32]; // 驱动器类型描述
    DWORD dwVolumeSerialID;           // 驱动器的卷系列号
    DWORD dwMaxComponentLen;          // 文件名最大长度
    DWORD dwFileSystemFlags;          // 文件系统标记
    //WCHAR szFlagsDescription[32];   // 文件系统标记描述
    WCHAR szFileSystemName[16];       // 文件系统名称
    struct _STORAGE_INFO 
    {
        DWORD   dwTotalClusters; // 可用扇区总量
        DWORD   dwFreeClusters;  // 空闲扇区总量
        DWORD   dwSectPerClust;  // 每簇的扇区数量
        DWORD   dwBytesPerSect;  // 每个扇区的容量(字节)
        DWORD64 qwTotalBytes;    // 磁盘空间大小
        DWORD64 qwFreeBytes;     // 空闲空间总量
    }STORAGE_INFO;
}DRIVE_INFO,*PDRIVE_INFO;
class CDiskControl
{
public:
    CDiskControl(void);
    ~CDiskControl(void);
public:
    BOOL              GetDirverInfo(LPCTSTR szName);
    list<DRIVE_INFO> *GetDriveInfoList();
private:
    list<DRIVE_INFO> m_lstDriveInfo;

};  



//.CPP

#include "DiskControl.h"
CDiskControl::CDiskControl(void)
{
    WCHAR  szPathName[MAX_PATH] = {0};
    GetLogicalDriveStrings(MAX_PATH,szPathName);
    for ( int i=0; szPathName[i]!='\0' && i<MAX_PATH; i++ )
    {
        GetDirverInfo(&szPathName[i]);
        i += wcslen(&szPathName[i]);
    }
}
CDiskControl::~CDiskControl(void)
{
}
BOOL CDiskControl::GetDirverInfo(LPCTSTR szName)
{
    DRIVE_INFO stcInfo = {0};
    // 1. 保存驱动器名称
    wcscpy_s(stcInfo.szName,szName);
    // 2. 保存驱动器类型
    stcInfo.uDriveType = GetDriveType(szName);
    // 3. 保存驱动器描述信息
    switch (stcInfo.uDriveType)
    {
    case DRIVE_UNKNOWN:
        wcscpy_s(stcInfo.szDriveTypeDescription, L"未知");
        break;
    case DRIVE_NO_ROOT_DIR:
        wcscpy_s(stcInfo.szDriveTypeDescription, L"驱动器的根路径无效");
        break;
    case DRIVE_REMOVABLE:
        wcscpy_s(stcInfo.szDriveTypeDescription, L"可移动介质类驱动器");
        break;
    case DRIVE_FIXED:
        wcscpy_s(stcInfo.szDriveTypeDescription, L"不可移除的驱动器");
        break;
    case DRIVE_REMOTE:
        wcscpy_s(stcInfo.szDriveTypeDescription, L"网络驱动器");
        break;
    case DRIVE_CDROM:
        {
            if ( !GetVolumeInformation(stcInfo.szName,NULL,NULL,NULL,NULL,NULL,NULL,NULL) )
                wcscpy_s(stcInfo.szDriveTypeDescription, L"CD-ROM驱动器(有光盘)");
            else
                wcscpy_s(stcInfo.szDriveTypeDescription, L"CD-ROM驱动器(无光盘)");
            break;
        }
    case DRIVE_RAMDISK:
        wcscpy_s(stcInfo.szDriveTypeDescription, L"RAM驱动器");
        break;
    default:
        wcscpy_s(stcInfo.szDriveTypeDescription, L"驱动器类型错误");
        break;
    }
    // 4. 获取并保存驱动器的卷系列号、文件名最大长度、文件系统标记、文件系统名称信息
    GetVolumeInformation(
        stcInfo.szName,              // 盘符/驱动器名
        stcInfo.szDriveTitle,        // 驱动器标题
        MAX_PATH,                    // 标题名数组最大空间
        &stcInfo.dwVolumeSerialID,   // 驱动器的卷系列号
        &stcInfo.dwMaxComponentLen,  // 文件名最大长度
        &stcInfo.dwFileSystemFlags,  // 文件系统标记
        stcInfo.szFileSystemName,    // 文件系统名
        MAX_PATH);                   // 文件系统名数组最大空间
    // 5. 使用GetDiskFreeSpace获取磁盘信息并打印结果
    GetDiskFreeSpace (szName,                   // 盘符/驱动器名
        &stcInfo.STORAGE_INFO.dwSectPerClust,   // 每簇的扇区数量
        &stcInfo.STORAGE_INFO.dwBytesPerSect,   // 每个扇区的字节数
        &stcInfo.STORAGE_INFO.dwFreeClusters,   // 空闲簇的总数
        &stcInfo.STORAGE_INFO.dwTotalClusters); // 全部簇的总数
    stcInfo.STORAGE_INFO.qwTotalBytes = 
          (DWORD64)stcInfo.STORAGE_INFO.dwTotalClusters  /* 全部簇的总数 */ 
        * (DWORD64)stcInfo.STORAGE_INFO.dwSectPerClust   /* 每簇的扇区数量 */ 
        * (DWORD64)stcInfo.STORAGE_INFO.dwBytesPerSect;  /* 每个扇区的容量 */ 
    
    stcInfo.STORAGE_INFO.qwFreeBytes = 
          (DWORD64)stcInfo.STORAGE_INFO.dwFreeClusters   /* 空闲簇的总数 */ 
        * (DWORD64)stcInfo.STORAGE_INFO.dwSectPerClust   /* 每簇的扇区数量 */ 
        * (DWORD64)stcInfo.STORAGE_INFO.dwBytesPerSect;  /* 每个扇区的容量 */ 
    // 6. 保存此信息
    m_lstDriveInfo.push_back(stcInfo);
    return TRUE;
}
list<DRIVE_INFO>* CDiskControl::GetDriveInfoList()
{
    return &m_lstDriveInfo;
}  

电动汽车数据集:2025年3K+记录 真实电动汽车数据:特斯拉、宝马、日产车型,含2025年电池规格和销售数据 关于数据集 电动汽车数据集 这个合成数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕捉技术规格、性能、定价、制造来源、销售和安全相关属性。每一行代表由vehicle_ID标识的唯一车辆列表。 关键特性 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航里程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨度多年(包括传统和即将推出的)。 数据质量说明: 某些行可能缺少某些字段(空白)。 几个分类字段包含不同的、特定于供应商的值(例如,Charging_Type、Battery_Type)。 各列中的单位混合在一起;注意kWh、km、hr、USD、g/km和额定值。 列 列类型描述示例 Vehicle_ID整数每个车辆记录的唯一标识符。1 制造商分类汽车品牌或OEM。特斯拉 型号类别特定型号名称/变体。型号Y 与记录关联的年份整数模型。2024 电池_类型分类使用的电池化学/技术。磷酸铁锂 Battery_Capacity_kWh浮充电池标称容量,单位为千瓦时。75.0 Range_km整数表示充满电后的行驶里程(公里)。505 充电类型主要充电接口或功能。CCS、NACS、CHAdeMO、DCFC、V2G、V2H、V2L Charge_Time_hr浮动充电的大致时间(小时),上下文因充电方法而异。7.5 价格_USD浮动参考车辆价格(美元).85000.00 颜色类别主要外观颜色或饰面。午夜黑 制造国_制造类别车辆制造/组装的国家。美国 Autonomous_Level浮点自动化能力级别(例如0-5),可能包括子级别的小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值