
在C++中获取文件大小有多种方式,适用于不同平台和标准库环境。下面介绍几种常用且有效的方法。
1. 使用标准库 fstream 获取文件大小
通过 std::ifstream 打开文件,利用 seekg 和 tellg 定位到文件末尾,读取当前位置即为文件大小。
- 打开文件后将读指针移到末尾
- 调用 tellg() 获取总字节数
- 再移回开头(如需继续读取)
示例代码:
#include#include long getFileSize(const std::string& filename) { std::ifstream file(filename, std::ios::binary | std::ios::ate | std::ios::in); if (!file.is_open()) return -1; long size = file.tellg(); file.close(); return size; }
优点:跨平台、不依赖系统API;缺点:需要打开文件,大文件略慢。
立即学习“C++免费学习笔记(深入)”;
2. 使用 C 标准库 _stat(仅限 Windows)
Windows环境下可使用 _stat 函数族获取文件信息,包含文件大小。
示例:
#include#include long getFileSize(const std::string& filename) { struct _stat buf; if (_stat(filename.c_str(), &buf) != 0) return -1; return buf.st_size; }
注意:_stat 是 Windows 特有的,Linux 下应使用 stat(见下一条)。
3. 使用 POSIX stat 函数(Linux/Unix 推荐)
在类 Unix 系统中,使用 stat 或 fstat 获取文件元数据。
#includelong getFileSize(const std::string& filename) { struct stat buf; if (stat(filename.c_str(), &buf) == -1) return -1; return buf.st_size; }
此方法无需打开文件,效率高,适合频繁查询场景。
4. 使用 C++17 文件系统库(现代 C++ 推荐)
C++17 引入了
#includelong getFileSize(const std::string& filename) { return std::filesystem::file_size(filename); }
需要编译器支持 C++17 并链接 stdc++fs(GCC)或自动链接(MSVC)。
GCC 编译时加:-lstdc++fs
基本上就这些常用方法。选择哪种取决于你的项目环境:跨平台推荐 fstream 或 filesystem,高性能服务端可用 stat/_stat,新项目优先考虑 C++17 的 filesystem。不复杂但容易忽略的是异常处理和路径合法性检查。











