调用GetDiskFreeSpaceExA获取磁盘空间返回全0的问题咨询
问题根因
你的代码存在3个核心问题直接导致结果异常:
- 指针未指向有效内存:你声明的
PULARGE_INTEGER是指向ULARGE_INTEGER结构体的指针类型,初始化时{}会将指针赋值为空指针。GetDiskFreeSpaceExA允许传入空指针作为输出参数,表示不需要获取对应项的值,因此不会写入任何数据,三个指针始终保持空值。 - 输出对象错误:你直接打印
lpTotalNumberOfBytes本质是打印指针本身的地址值,而非指针指向的结构体中存储的容量数据,因此输出全0的空地址值。 - 注释中的盘符构造逻辑冗余:
std::string会自动在末尾追加'\0'结束符,不需要手动额外添加。
修复方案
直接在栈上声明ULARGE_INTEGER结构体变量,传入变量地址给API,通过QuadPart成员读取64位容量数值即可,修正后的代码如下:
#include <windows.h> #include <iostream> int main() { ULARGE_INTEGER freeBytesAvailableToCaller{}; ULARGE_INTEGER totalNumberOfBytes{}; ULARGE_INTEGER totalNumberOfFreeBytes{}; // 若要查询指定盘符,将第一个参数替换为如"C:\\"的盘符路径即可 if (GetDiskFreeSpaceExA(NULL, &freeBytesAvailableToCaller, &totalNumberOfBytes, &totalNumberOfFreeBytes)) { std::cout << "磁盘总容量:" << totalNumberOfBytes.QuadPart << " 字节\n"; std::cout << "当前用户可用容量:" << freeBytesAvailableToCaller.QuadPart << " 字节\n"; std::cout << "磁盘总可用容量:" << totalNumberOfFreeBytes.QuadPart << " 字节\n"; } else { std::cout << "调用失败,错误码:" << GetLastError() << "\n"; } return 0; }
内容的提问来源于stack exchange,提问作者chris-p-tech
相关产品推荐
相关产品推荐

