新闻中心

C++如何获取文件大小_C++ file_size函数与seekp定位方法

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

c++如何获取文件大小_c++ file_size函数与seekp定位方法

在C++中获取文件大小有多种方法,常用的方式包括使用标准库中的 std::filesystem::file_size 函数(C++17起支持)和通过文件流结合 seekgtellg 进行定位计算。下面分别介绍这两种主流方法。

使用 std::filesystem::file_size 获取文件大小

从 C++17 开始,标准库提供了 filesystem 模块,其中的 file_size 函数可以直接返回指定文件的字节数,使用简单且不易出错。

示例代码:

Gaga Gaga

曹越团队开发的AI视频生成工具

Gaga 1151 查看详情 Gaga
#include <iostream>
#include <filesystem>
<p>int 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 <iostream>
#include <fstream>
<p>long 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;
}</p><p>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定位方法的详细内容,更多请关注其它相关文章!


# ai  # c++  # ios  # stream  # 字节  # 如何网站推广报告  # 如何优化网站的物理结构  # 绥中抖音seo咨询  # 品牌网站建设的理由  # 怎么自己做网站的优化  # 朔州网站推广好不好用  # 苏州网站建设教材推荐  # 鹤壁seo网站推广工具价格  # 江门推广营销方式  # b2b网站的推广目标  # 相关文章  # 适用于  # 的是  # 如何实现  # 性好  # 配置文件  # 模式下  # 种方法  # 自定义  # 两种  # 标准库  # 常见问题 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 蛙漫移动版在线看 蛙漫手机浏览器直达入口  QQ邮箱登录首页官网地址2026 QQ邮箱官方网页入口  Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议  随机参数递归函数的基准调用次数与时间复杂度探究  怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  J*aScript:在map操作中高效处理空数组  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  微博网页版首页入口 微博电脑端官网登录链接  正确连接J*aScript到HTML实现可点击图片与自定义事件处理  妖精动漫免费平台 妖精动漫官网资源观看网址  在Typer应用中优雅地处理和重组任意命令行参数  Python实现多节点属性重叠度分析教程  NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰  京东单号查询入口_京东快递订单追踪入口  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  网站内容防复制粘贴的实现策略与局限性  Win11网速慢怎么解决 Win11网络设置优化解除限速  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】  在React函数组件中利用原生HTML5进行邮箱地址验证  Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值  在Runstone环境中高效处理TasteDive API的JSON数据  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化  树莓派传感器触发:通过Twilio API发送WhatsApp消息教程  163邮箱注册官网 免费申请163个人邮箱  Pandas DataFrame:高效添加条件计算列  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  J*aScript中管理异步API调用:确保操作顺序与数据一致性  冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法  抖音网页版平台入口 抖音网页版官网在线访问教程  Golang如何实现状态模式管理对象状态_Golang State模式实现技巧  J*aScript DOM操作:高效清空列表元素的策略与实践  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】  Node.js中HTML按钮与J*aScript函数交互的正确姿势  CSS Box Model与弹性按钮:维持布局稳定的动画实践  Composer中的^和~符号代表什么_精通Composer版本号语义化约束  2026春节假期时间安排 2026春节假日查询  马斯克:Optimus 人形机器人复数形式为 Optimi  Yandex免登录网页版地址 Yandex搜索引擎官方访问入口  AO3中文官网链接_AO3网页版稳定镜像站  sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE  QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台  Python多版本共存与虚拟环境管理深度指南  Win10系统怎么查看已安装更新_Win10卸载有问题的更新补丁  Golang并发任务中错误如何聚合_Golang goroutine error收集方式 

搜索