新闻中心
C++如何获取文件大小_C++文件操作与文件大小获取方法
使用C++获取文件大小有多种方法:1. 通过fstream的seekg和tellg跨平台读取;2. 使用C库fseek和ftell,但大文件需注意溢出;3. Windows下可用GetFileSizeEx支持超大文件;4. POSIX系统推荐stat函数高效查询。

在C++中获取文件大小是一个常见的需求,比如在读取大文件、预分配内存或校验文件完整性时。有多种方法可以实现这一功能,每种方式适用于不同的场景和平台。以下是几种常用且有效的获取文件大小的方法。
使用标准库 fstream 结合 seekg 和 tellg
这是最常见且跨平台的C++方法之一。通过将文件指针移动到末尾,再调用 tellg() 获取当前位置,即可得到文件字节数。
- 打开文件时使用 std::ios::binary 模式,避免文本模式换行符转换影响结果。
- 先调用 seekg(0, std::ios::end) 定位到文件末尾。
- 用 tellg() 获取位置,即文件大小(单位:字节)。
示例代码:
#include
#include
long long getFileSize(const std::string& filename) {
std::ifstream file(filename, std::ios::binary | std::ios::ate);
if (!file.is_open()) return -1;
return file.tellg();
}
注意:std::ios::ate 在构造时直接定位到末尾,简化操作。
使用 C 标准库函数 fseek 和 ftell
如果你更习惯C风格操作,或者在混合项目中使用,可以用 fopen、fseek 和 ftell 来获取文件大小。
- 以二进制模式打开文件("rb")。
- 用 fseek(fp, 0, SEEK_END) 移动到末尾。
- 调用 ftell(fp) 获取大小。
示例代码:
#include
long long getFileSizeC(const char* filename) {
FILE* fp = fopen(filename, "rb");
if (!fp) return -1;
fseek(fp, 0, SEEK_END);
long long size = ftell(fp);
fclose(fp);
return size;
}
优点是简洁,缺点是 ftell 对大于2GB的文件在某些平台可能有问题(返回值为long,可能溢出),建议使用 _fseeki64 / _ftelli64(Windows)或 fseeko / ftello(POSIX)处理大文件。
使用操作系统API(Windows: GetFileSizeEx)
在Windows平台上,可以调用Win32 API GetFileSizeEx 精确获取文件大小,支持超大文件(超过4GB)。
需要包含头文件 windows.h,并使用宽字符或ANSI版本函数。
Perplexity
Perplexity是一个ChatGPT和谷歌结合的超级工具,可以让你在浏览互联网时提出问题或获得即时摘要
302
查看详情
示例代码:
#include windows.h>
long long getFileSizeWin(const std::string& filename) {
HANDLE hFile = CreateFileA(filename.c_str(), GENERIC_READ,
FILE_SHARE_READ, nullptr,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
if (hFile == INVALID_HANDLE_VALUE) return -1;
LARGE_INTEGER size;
GetFileSizeEx(hFile, &size);
CloseHandle(hFile);
return size.QuadPart;
}
该方法性能高,适合频繁调用或系统级程序。
使用 POSIX stat 函数(Linux/Unix)
在类Unix系统中,推荐使用 stat() 或 lstat() 获取文件元信息,其中包含文件大小。
st_size 字段直接给出文件字节数。
示例代码:
#include
long long getFileSizePOSIX(const std::string& filename) {
struct stat buf;
if (stat(filename.c_str(), &buf) != 0) return -1;
return buf.st_size;
}
这个方法不打开文件流,开销小,适合仅查询大小的场景。
基本上就这些常用方法。选择哪种取决于你的平台需求和项目环境。跨平台项目可封装判断宏,统一接口。注意权限、路径错误和大文件兼容性问题。
以上就是C++如何获取文件大小_C++文件操作与文件大小获取方法的详细内容,更多请关注其它相关文章!
# 种方法
# 营销活动推广前要做什么
# seo该如何开展
# 教育网站推广活动双十一
# 金华网站建设推广方案
# 州网站建设服务
# 东莞网站推广及优化网站
# 财税网站推广
# 微商软文不是seo文章
# seo实战密码 课件
# 榆林推广微营销方式
# 这是
# 网络编程
# 有什么区别
# 第三方
# linux
# 微软
# 有多
# 大文件
# 是一个
# 标准库
# stream
# win
# ios
# c++
# unix
# 字节
# 操作系统
# windows
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Excel文件在线转换快速入口 Excel在线格式转换网站
零跑汽车11月交付量达70327台 实现连续9个月正增长
EMS快递官网app_中国邮政速递物流手机客户端
如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式
React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性
Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】
sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置
Lar*el 8 多关键词数据库搜索优化实践
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画
mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤
React列表渲染与独立状态管理:避免全局状态影响局部更新
Golang如何实现状态模式管理对象状态_Golang State模式实现技巧
如何在Promise链中有效终止错误处理后的执行
蛙漫移动版在线看 蛙漫手机浏览器直达入口
fishbowl官网免费版 fishbowl养鱼网站入口
jQuery Mask 插件中实现电话号码固定前导零的教程
抖音未来赚钱的新趋势 2025年值得关注的变现风口分析
Composer中的^和~符号代表什么_精通Composer版本号语义化约束
抓大鹅解压小游戏 抓大鹅摸鱼解压入口
红果短剧网页版官网入口 官方最新网址发布
精准捕获:如何在页面中监听除特定元素外的所有点击事件
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
解决 Express.js 中 PUT 请求密码修改失败的路由配置指南
在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用
NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰
企业名称高精度匹配:N-gram方法在结构相似性分析中的应用
整合Supabase认证与Django模型:跨模式迁移的解决方案
如何使 Jest 模拟函数默认抛出错误以提高测试效率
Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址
生成rdflib自定义SPARQL函数:参数匹配与实践指南
美团外卖商家服务中心入口 美团商家版官网入口
《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情
J*aScript中正确使用querySelectorAll与复杂CSS选择器
css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间
自定义Bag-of-Words实现:处理带负号的词汇权重
steam官方网页快速访问 steam账号注册全流程
知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法
冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法
C++如何实现单例模式_C++设计模式之线程安全的单例写法
微博网页版官方账号登录 微博网页版内容浏览使用指南
qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程
飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析
QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道
内存检查:在VS Code中调试C++时的内存视图
在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验
漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站
qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程


2025-11-14
浏览次数:次
返回列表