_file_size 在64位程序中仍返回-1,因其内部用32位long存储大小,调用GetFileSize后强制拼接导致溢出;应改用GetFileSizeEx或跨平台_stat64。

c++怎么获取超大文件的大小(支持4GB以上)_file_size函数【实战】

为什么 _file_size 在 64 位程序里也返回 -1?

因为 _file_size 是 Microsoft C 运行时的旧函数,内部用 long 存大小,而 long 在 Windows 上始终是 32 位(即使在 x64 编译下),最大只支持 2GB(有符号)或 4GB(无符号),超过就溢出变负数或截断。这不是编译选项或平台位数能绕过的限制。

Windows 下真正可靠的方式:用 GetFileSizeEx

这是 Win32 原生支持大文件的 API,返回 LARGE_INTEGER(即 int64_t),能准确表示最大约 9EB 的文件大小。必须用它替代 _file_size

跨平台可移植写法:优先用 stat64stat 的 64 位变体

Linux/macOS 和现代 MinGW、MSVC(带 UCRT)都支持 struct stat64_stat64,它们的 st_size 字段是 off64_t(64 位),不依赖文件句柄。

容易被忽略的权限与符号链接问题

即使函数本身支持大文件,调用仍可能失败——不是因为大小,而是访问控制或路径语义。

事情说清了就结束
本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。