c++kquote>C++中获取文件大小主要有两种方法:1. 使用C++17的std::filesystem::file_size函数,直接返回文件字节数,简洁安全;2. 通过ifstream结合seekg与tellg,在二进制模式下定位文件末尾获取大小,兼容性好但需手动处理错误。优先推荐第一种方法。

在C++中获取文件大小有多种方法,常用的方式包括使用标准库中的 std::filesystem::file_size 函数(C++17起支持)和通过文件流结合 seekg 与 tellg 进行定位计算。下面分别介绍这两种主流方法。
使用 std::filesystem::file_size 获取文件大小
从 C++17 开始,标准库提供了 filesystem 模块,其中的 file_size 函数可以直接返回指定文件的字节数,使用简单且不易出错。
示例代码:
#include #includeint main() {const char* filename = "example.txt";if (std::filesystem::exists(filename)) {std::uintmax_t size = std::filesystem::file_size(filename);std::cout << "文件大小: " << size << " 字节" << std::endl;} else {std::cout << "文件不存在" << std::endl;}return 0;}
注意:编译时需要启用 C++17 或更高版本,并链接 stdc++fs(部分编译器如 g++ 需添加 -lstdc++fs)。
使用 seekg 和 tellg 通过输入流获取大小
对于不支持 C++17 的环境,可以使用 ifstream 结合 seekg 和 tellg 方法来测量文件大小。基本思路是将读指针移到文件末尾,再用 tellg 获取当前位置,即为文件总长度。
示例代码:
#include #includelong getFileSize(const char* filename) {std::ifstream file(filename, std::ios::binary | std::ios::ate);if (!file.is_open()) {return -1; // 打开失败}long size = file.tellg(); // 当前位置即文件末尾偏移量file.close();return size;}
int main() {long size = getFileSize("example.txt");if (size != -1) {std::cout << "文件大小: " << size << " 字节" << std::endl;} else {std::cout << "无法打开文件" << std::endl;}return 0;}
关键点说明:打开文件时使用 std::ios::ate 标志会直接将读指针定位到文件末尾。使用二进制模式(std::ios::binary)避免文本模式下换行符转换影响大小判断。tellg 返回的是当前读指针的位置,在 ate 模式下就是文件总字节数。
常见问题与注意事项
两种方法各有适用场景:filesystem::file_size 更现代、简洁,适合新项目;但需注意兼容性。流方式兼容性好,适用于老标准或嵌入式环境,但需手动处理打开失败等情况。不能对标准输入或其他非普通文件(如设备文件)调用 file_size,否则会抛异常或返回错误。
基本上就这些。选择哪种方式取决于你的编译环境和项目要求。如果条件允许,优先使用 std::filesystem::file_size,代码更清晰安全。
立即学习“C++免费学习笔记(深入)”;
以上就是C++如何获取文件大小_C++ file_size函数与seekp定位方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1489262.html
微信扫一扫
支付宝扫一扫