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

如何在C++中正确获取大文件(如16GB)的大小?

大文件(16GB)大小获取错误的修复方案

你的代码使用GetFileSize获取文件大小,这个函数的返回值是32位无符号整数(DWORD),最大值仅为4294967295字节(约4GB)。16GB的文件远超出这个范围,因此会返回截断后的错误值,导致结果与实际大小不符。

修复方案是改用支持64位文件大小的GetFileSizeEx函数,代码示例如下:

HANDLE FileHandle = INVALID_HANDLE_VALUE;
LARGE_INTEGER FileSize;
FileHandle = CreateFileA(szInputFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(FileHandle == INVALID_HANDLE_VALUE)
    return;

// 调用GetFileSizeEx获取64位文件大小
if (!GetFileSizeEx(FileHandle, &FileSize)) {
    // 可添加错误处理逻辑,例如调用GetLastError()获取错误码
    CloseHandle(FileHandle);
    return;
}

// FileSize.QuadPart即为64位的文件字节数
CloseHandle(FileHandle); // 务必关闭文件句柄,避免资源泄漏

注意事项:

  • 原代码未关闭文件句柄,容易造成系统资源泄漏,修复后的代码补充了CloseHandle调用。
  • GetFileSizeEx调用失败时,可通过GetLastError()获取具体错误信息,辅助排查问题。
  • LARGE_INTEGER的QuadPart成员是64位整数类型(LONGLONG),支持最大9EB的文件大小,完全满足16GB文件的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:45:38