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++的标准库都提供了足够支持。关键是在使用时注意打开模式和定位方式,避免踩坑。

相关专题

更多
C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

9

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

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

31

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

14

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

42

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

6

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

6

2026.01.15

php图片上传教程汇总
php图片上传教程汇总

本专题整合了php图片上传相关教程,阅读专题下面的文章了解更多详细教程。

2

2026.01.15

phpstorm相关教程大全
phpstorm相关教程大全

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

4

2026.01.15

热门下载

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

精品课程

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

共94课时 | 6.8万人学习

C 教程
C 教程

共75课时 | 4万人学习

C++教程
C++教程

共115课时 | 12.3万人学习

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

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