使用fseek和ftell获取文件大小,适用于C风格操作,但不支持超大文件;2. C++17 filesystem库提供跨平台file_size函数,简洁安全;3. POSIX系统可用stat获取文件信息;4. ifstream结合tellg可读取文件长度;5. Windows平台可调用GetFileSizeEx处理大文件。推荐优先使用filesystem。

在C++中获取文件大小有多种方式,适用于不同平台和标准库版本。下面介绍几种常用且有效的方法,帮助你在不同环境下准确读取文件大小。
1. 使用 fseek 和 ftell(C风格)
这是最经典的方式,利用C标准库中的文件操作函数:
打开文件后,将文件指针移动到末尾使用 ftell 获取当前位置,即文件大小(字节数)记得关闭文件
示例代码:
#includelong getFileSize(const char filename) {FILE file = fopen(filename, "rb");if (!file) return -1;
fseek(file, 0, SEEK_END);long size = ftell(file);fclose(file);return size;
}
注意:该方法不支持大于2GB的文件(在某些系统上),建议使用 _fseeki64 和 _ftelli64 处理大文件(Windows)。
立即学习“C++免费学习笔记(深入)”;
2. 使用 C++17 的
C++17引入了filesystem库,提供了跨平台的文件操作接口,获取文件大小非常简单:
示例代码:
#include namespace fs = std::filesystem;long getFileSize(const std::string& filename) {if (fs::exists(filename)) {return fs::file_size(filename);}return -1;}
优点:简洁、安全、跨平台;缺点:需要编译器支持C++17及以上标准。
3. 使用 stat 系统调用(POSIX/Linux)
在Linux或类Unix系统中,可以使用stat函数获取文件信息:
#includelong getFileSize(const char* filename) {struct stat buf;if (stat(filename, &buf) != 0) {return -1;}return buf.st_size;}
适用于Linux/macOS等系统,性能好,但不兼容Windows原生环境(可用_stat64替代)。
4. 使用输入流读取整个文件(C++流方式)
通过std::ifstream配合seekg和tellg获取大小:
#includelong 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;
}
说明:ate标志让文件指针一开始就指向末尾,tellg()返回当前位置(即大小)。
如果不用ate,也可以手动移动:
file.seekg(0, std::ios::end);long size = file.tellg();
5. Windows API 方法(仅限Windows)
在Windows平台上,可使用GetFileSize或GetFileSizeEx:
#includelong long getFileSize(const std::string& filename) {HANDLE hFile = CreateFileA(filename.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE) return -1;
LARGE_INTEGER size;if (GetFileSizeEx(hFile, &size)) { CloseHandle(hFile); return size.QuadPart;}CloseHandle(hFile);return -1;
}
适用于Windows原生开发,支持超大文件(超过4GB)。
基本上就这些常见的方法。选择哪种取决于你的项目需求、目标平台和C++标准支持情况。对于现代C++项目,推荐优先使用filesystem;若需兼容老标准或嵌入式环境,fseek/ftell或stat是不错的选择。
以上就是c++++怎么获取文件的大小_c++读取文件大小的多种方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1482156.html
微信扫一扫
支付宝扫一扫