You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:06:04