新闻中心

C++如何获取文件大小_C++文件操作与文件大小获取方法

2025-11-14
浏览次数:
返回列表
使用C++获取文件大小有多种方法:1. 通过fstream的seekg和tellg跨平台读取;2. 使用C库fseek和ftell,但大文件需注意溢出;3. Windows下可用GetFileSizeEx支持超大文件;4. POSIX系统推荐stat函数高效查询。

c++如何获取文件大小_c++文件操作与文件大小获取方法

在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风格操作,或者在混合项目中使用,可以用 fopenfseekftell 来获取文件大小。

  • 以二进制模式打开文件("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

Perplexity是一个ChatGPT和谷歌结合的超级工具,可以让你在浏览互联网时提出问题或获得即时摘要

Perplexity 302 查看详情 Perplexity

示例代码:

#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浏览器密码管理器数据备份教程 

搜索