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

Visual Studio 2013中fileapi.h为何不包含GetDiskSpaceInformationA函数?

问题原因与解决方案

核心原因:Windows SDK版本不匹配

你遇到的问题和目标架构(x86/x64)无关,主要是Visual Studio 2013默认搭载的Windows SDK版本过旧。GetDiskSpaceInformationA()这类函数是Windows 10 1703版本之后才新增的API,而VS2013默认配套的是Windows 8.1 SDK,这个版本的头文件里根本没有这些新函数的声明,自然会报“未定义”错误。

解决办法

方法1:升级Windows SDK并配置项目

  • 下载并安装包含目标函数的Windows SDK版本(比如Windows 10 1703及以上版本)。
  • 打开项目属性:右键项目 → 「属性」→ 「配置属性」→ 「常规」,在「Windows SDK版本」下拉菜单中选择刚安装的新版本SDK。
  • 配置预处理器宏:在「配置属性」→ 「C/C++」→ 「预处理器」→ 「预处理器定义」中,添加对应Windows版本的宏,比如针对Windows 10 1703,添加_WIN32_WINNT=0x0A00(或者更具体的_WIN32_WINNT_WIN10_CREATOR),确保头文件会暴露这些新API的声明。

方法2:使用兼容旧SDK的替代函数

如果暂时无法升级SDK,可以改用旧版本SDK支持的GetDiskFreeSpaceExA()函数,它同样可以获取磁盘总空间、可用空间等核心信息,用法示例:

#include <windows.h>
#include <iostream>

int main() {
    LPCSTR drive = "C:\\";
    ULARGE_INTEGER freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes;
    
    if (GetDiskFreeSpaceExA(drive, &freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes)) {
        std::cout << "总空间:" << totalNumberOfBytes.QuadPart / (1024 * 1024 * 1024) << " GB" << std::endl;
        std::cout << "可用空间:" << freeBytesAvailable.QuadPart / (1024 * 1024 * 1024) << " GB" << std::endl;
    } else {
        std::cout << "获取失败,错误码:" << GetLastError() << std::endl;
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者MarkusAnd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:03:12