c++如何获取当前Windows下所有逻辑驱动器的名称及其剩余容量【详解】

陌敏酱_2389

陌敏酱_2389

2026-03-26

542人浏览

原创

getlogicaldrives 返回 dword 位掩码,bit0~bit25 分别对应 a:~z: 驱动器是否存在,需用位运算(如 drives & (1

c++如何获取当前windows下所有逻辑驱动器的名称及其剩余容量【详解】

GetLogicalDrives 返回的是位掩码,不是驱动器列表

很多人调用 GetLogicalDrives() 后直接想遍历返回值当数组用,结果崩溃或漏盘——它返回的是一个 DWORD,每一位代表一个驱动器是否存在(bit 0 = A:,bit 1 = B:,… bit 25 = Z:)。你得手动检查哪些位被置 1。

  • 必须用位运算逐个判断:(drives & (1 ,i 从 0 到 25
  • 驱动器号是字符计算出来的:char driveLetter = 'A' + i,再拼上 ":\"
  • 注意:返回值为 0 表示没有可用驱动器(极少见),但更常见的是权限不足导致某些驱动器不显示(比如网络驱动器未映射或被策略隐藏)

GetDiskFreeSpaceEx 要求路径末尾带反斜杠,且不能是根目录的“裸字母”

GetDiskFreeSpaceEx() 对参数很敏感:传 "C:" 会失败(ERROR_INVALID_PARAMETER),传 "C:\\" 才行;如果路径不存在或无访问权限,它返回 FALSE,且 lpFreeBytesAvailable 等输出参数值未定义——别假设它们是 0。

  • 构造路径时务必用 std::string(1, driveLetter) + ":\\",双反斜杠是字面量需要转义
  • 调用前先用 GetDriveType() 过滤掉 DRIVE_NO_ROOT_DIR 或 DRIVE_UNKNOWN 类型,避免无效调用
  • 对可移动设备(如 U 盘)或光驱,即使 GetLogicalDrives() 显示了该盘符,GetDiskFreeSpaceEx() 也可能因介质未就绪而失败

剩余容量单位是字节,但显示时要注意整数溢出和符号问题

GetDiskFreeSpaceEx() 输出的三个参数都是 ULARGE_INTEGER*,底层是 ULONGLONG。如果你用 long long 接收并除以 1024 做换算,没问题;但若误用 long(在 Windows x64 上仍是 32 位),高位会被截断,显示成负数或极小值。

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载
  • 安全做法:统一用 uint64_t 或 ULONGLONG 接收,再做除法
  • 换算 KiB/MiB/GiB 时,用 / 1024、/ (1024 * 1024) 等,别用 pow(1024, n)——编译器可能优化成浮点,引入精度误差
  • 空闲空间可能为 0(满盘)或接近 ULLONG_MAX(例如某些网络驱动器或 CD-ROM 未加载时),需单独判断是否有效

权限和 UAC 会影响实际获取到的驱动器数量

标准用户进程无法读取 BitLocker 加密卷的剩余空间(即使盘符可见),也无法访问被组策略隐藏的驱动器(如禁用软盘、CD-ROM 的策略)。UAC 提权后仍不能绕过这些限制——这不是权限问题,而是系统级过滤。

  • 不要依赖 GetLogicalDrives() 结果和资源管理器显示完全一致;它反映的是当前会话下“操作系统允许你看到的”逻辑盘符
  • 若需更高一致性,可补充读取 WMIC LOGICALDISK GET DeviceID,FreeSpace,Size(需启动 wmic.exe 进程),但会慢、有 Shell 依赖、且同样受策略约束
  • 真实场景中,建议把“获取失败”的驱动器记录为 unknown 而非跳过,否则用户会疑惑“为什么 D: 没显示”

最麻烦的不是 API 调用本身,而是每个驱动器都可能处于不同状态:存在但不可访问、存在但无介质、存在但拒绝返回空间数据。别试图一次调用覆盖所有情况,分层检查才是稳妥做法。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

驱动精灵
驱动精灵

驱动精灵基于驱动之家十余年的专业数据积累,驱动支持度高,已经为数亿用户解决了各种电脑驱动问题、系统故障,是目前有效的驱动软件,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.26

3119

3

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.27

2698

6

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

2023.08.01

1448

3

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2459

5

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.08

3250

4

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

1537

3

windows boot manager
windows boot manager

windows boot manager无法开机的解决方法:1、系统文件损坏,使用Windows安装光盘或USB启动盘进入恢复环境,选择修复计算机,然后选择自动修复;2、引导顺序错误,进入恢复环境,选择命令提示符,输入命令"bootrec /fixboot"和"bootrec /fixmbr",然后重新启动计算机;3、硬件问题,使用硬盘检测工具进行扫描和修复;4、重装操作系统。本专题还提供其他解决

2023.08.28

2437

4

windows锁屏快捷键
windows锁屏快捷键

windows锁屏快捷键是Windows键+L、Ctrl+Alt+Del、Windows键+D、Windows键+P和Windows键+R。本专题为大家提供windows相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.30

4587

5

Window.setInterval()方法
Window.setInterval()方法

Window.setInterval() 方法的基本语法是“window.setInterval(function, delay)”,function是要重复执行的函数或代码块,delay是每次执行之间的时间间隔,以毫秒为单位。本专题为大家提供Window.setInterval()相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

655

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习