0

0

C++如何获取文件大小?文件定位操作实战

P粉602998670

P粉602998670

发布时间:2025-06-30 12:45:05

|

771人浏览过

|

来源于php中文网

原创

c++++中获取文件大小的常见方法主要有两种:一是使用ifstream直接获取,二是通过seekg和tellg手动定位。第一种方法通过以二进制模式打开文件并定位到末尾,直接调用tellg()获取大小;第二种方法则更灵活,适用于需要多次定位的场景,需手动调用seekg(0, std::ios::end)后再使用tellg()获取大小。此外,还需注意大文件支持、路径、权限及非普通文件的问题。

C++如何获取文件大小?文件定位操作实战

在C++中获取文件大小其实是一个很常见的需求,比如读取整个文件内容、判断日志文件是否过大等。实现方式并不复杂,主要依赖于标准库中的文件流操作,尤其是fstreamseekg/tellg这类定位函数。

C++如何获取文件大小?文件定位操作实战

下面介绍几种常用的实现方法,适合不同场景使用。

C++如何获取文件大小?文件定位操作实战

使用 ifstream 获取文件大小

这是最常见也最简单的方式之一。通过打开文件流,将文件指针移动到末尾,再调用 tellg() 函数来获取当前的位置,就是文件的大小。

立即学习C++免费学习笔记(深入)”;

#include 
#include 

long get_file_size(const std::string& filename) {
    std::ifstream file(filename, std::ios::binary | std::ios::ate);
    if (!file)
        return -1; // 打开失败
    return file.tellg();
}
  • std::ios::binary:以二进制模式打开,避免换行符被转换影响位置计算。
  • std::ios::ate:打开时直接定位到文件末尾,提升效率。

这个方法适用于大多数情况,尤其是你只需要知道大小,不需要后续读取内容的时候。

情感家园企业站5.0 多语言多风格版
情感家园企业站5.0 多语言多风格版

一套面向小企业用户的企业网站程序!功能简单,操作简单。实现了小企业网站的很多实用的功能,如文章新闻模块、图片展示、产品列表以及小型的下载功能,还同时增加了邮件订阅等相应模块。公告,友情链接等这些通用功能本程序也同样都集成了!同时本程序引入了模块功能,只要在系统默认模板上创建模块,可以在任何一个语言环境(或任意风格)的适当位置进行使用!

下载
C++如何获取文件大小?文件定位操作实战

seekgtellg 精确控制文件位置

如果你已经打开了一个文件流,并且可能需要多次定位(比如读取特定部分),可以手动使用 seekgtellg 来操作。

std::ifstream file("example.txt", std::ios::binary);
if (file) {
    file.seekg(0, std::ios::end); // 移动到文件末尾
    long size = file.tellg();     // 获取当前位置(也就是文件大小)
    std::cout << "File size: " << size << " bytes" << std::endl;
}
  • 第一个参数是偏移量,第二个是起始位置:
    • std::ios::beg:从文件开头开始
    • std::ios::cur:从当前位置开始
    • std::ios::end:从文件结尾开始

这种方式更灵活,适合需要多次定位或读取特定数据块的情况。


注意事项与常见问题

虽然上面的方法都很实用,但在实际开发中还是有一些细节需要注意:

  • 大文件支持:如果文件超过2GB,某些平台上tellg()返回的类型(通常是long)可能不够用,建议使用std::ifstream::pos_type或者std::streamoff来存储大小。
  • 路径问题:确保传入的文件路径是正确的,否则会打开失败。
  • 权限问题:没有读取权限也会导致无法获取大小。
  • 非普通文件:比如管道、设备文件等,可能不支持seekg操作。

基本上就这些方法了。不管是直接获取大小,还是结合文件定位做更多操作,C++的标准库都提供了足够支持。关键是在使用时注意打开模式和定位方式,避免踩坑。

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7.1万人学习

C 教程
C 教程

共75课时 | 4.1万人学习

C++教程
C++教程

共115课时 | 12.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号