《C++进阶--11.文件操作》

c++ 黑马教程笔记//目录 (44条消息) C++(三十四)之全局友元函数//黑马教程_风请扬-优快云博客 阅读详情

目录

11. 文件操作

11.1文本文件

11.1.1写文件

11.1.2读文件

11.2 二进制文件

11.2.1 写文件

11.2.2 读文件


11. 文件操作

程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放

通过文件可以将数据持久化

C++中对文件操作需要包含头文件 < fstream >

文件类型分为两种:

  1. 文本文件 - 文件以文本的ASCII码形式存储在计算机中

  2. 二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们

操作文件的三大类:

  1. ofstream:写操作

  2. ifstream: 读操作

  3. fstream : 读写操作

11.1文本文件

11.1.1写文件

写文件步骤如下:

  1. 包含头文件

    #include <fstream>

  2. 创建流对象

    ofstream ofs;

  3. 打开文件

    ofs.open("文件路径",打开方式);

  4. 写数据

    ofs << "写入的数据";

  5. 关闭文件

    ofs.close();

文件打开方式:

打开方式解释
ios::in为读文件而打开文件
ios::out为写文件而打开文件
ios::ate初始位置:文件尾
ios::app追加方式写文件
ios::trunc如果文件存在先删除,再创建
ios::binary二进制方式

注意: 文件打开方式可以配合使用,利用|操作符

例如:用二进制方式写文件 ios::binary | ios:: out

示例:

#include <fstream>
​
void test01()
{
    ofstream ofs;
    ofs.open("test.txt", ios::out);
​
    ofs << "姓名:张三" << endl;
    ofs << "性别:男" << endl;
    ofs << "年龄:18" << endl;
​
    ofs.close();
}
​
int main() {
​
    test01();
​
    system("pause");
​
    return 0;
}

总结:

  • 文件操作必须包含头文件 fstream

  • 读文件可以利用 ofstream ,或者fstream类

  • 打开文件时候需要指定操作文件的路径,以及打开方式

  • 利用<<可以向文件中写数据

  • 操作完毕,要关闭文件

11.1.2读文件

读文件与写文件步骤相似,但是读取方式相对于比较多

读文件步骤如下:

  1. 包含头文件

    #include <fstream>

  2. 创建流对象

    ifstream ifs;

  3. 打开文件并判断文件是否打开成功

    ifs.open("文件路径",打开方式);

  4. 读数据

    四种方式读取

  5. 关闭文件

    ifs.close();

示例:

#include <fstream>
#include <string>
void test01()
{
    ifstream ifs;
    ifs.open("test.txt", ios::in);
​
    if (!ifs.is_open())
    {
        cout << "文件打开失败" << endl;
        return;
    }
​
    //第一种方式
    //char buf[1024] = { 0 };
    //while (ifs >> buf)
    //{
    //  cout << buf << endl;
    //}
​
    //第二种
    //char buf[1024] = { 0 };
    //while (ifs.getline(buf,sizeof(buf)))
    //{
    //  cout << buf << endl;
    //}
​
    //第三种
    //string buf;
    //while (getline(ifs, buf))
    //{
    //  cout << buf << endl;
    //}
​
    char c;
    while ((c = ifs.get()) != EOF)
    {
        cout << c;
    }
​
    ifs.close();
​
​
}
​
int main() {
​
    test01();
​
    system("pause");
​
    return 0;
}

总结:

  • 读文件可以利用 ifstream ,或者fstream类

  • 利用is_open函数可以判断文件是否打开成功

  • close 关闭文件

11.2 二进制文件

以二进制的方式对文件进行读写操作

打开方式要指定为 ios::binary

11.2.1 写文件

二进制方式写文件主要利用流对象调用成员函数write

函数原型 :ostream& write(const char * buffer,int len);

参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数

示例:

#include <fstream>
#include <string>
​
class Person
{
public:
    char m_Name[64];
    int m_Age;
};
​
//二进制文件  写文件
void test01()
{
    //1、包含头文件
​
    //2、创建输出流对象
    ofstream ofs("person.txt", ios::out | ios::binary);
    
    //3、打开文件
    //ofs.open("person.txt", ios::out | ios::binary);
​
    Person p = {"张三"  , 18};
​
    //4、写文件
    ofs.write((const char *)&p, sizeof(p));
​
    //5、关闭文件
    ofs.close();
}
​
int main() {
​
    test01();
​
    system("pause");
​
    return 0;
}

总结:

  • 文件输出流对象 可以通过write函数,以二进制方式写数据

11.2.2 读文件

二进制方式读文件主要利用流对象调用成员函数read

函数原型:istream& read(char *buffer,int len);

参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数

示例:

#include <fstream>
#include <string>
​
class Person
{
public:
    char m_Name[64];
    int m_Age;
};
​
void test01()
{
    ifstream ifs("person.txt", ios::in | ios::binary);
    if (!ifs.is_open())
    {
        cout << "文件打开失败" << endl;
    }
​
    Person p;
    ifs.read((char *)&p, sizeof(p));
​
    cout << "姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;
}
​
int main() {
​
    test01();
​
    system("pause");
​
    return 0;
}

  · 文件输入流对象 可以通过read函数,以二进制方式读数据

C++11 学习笔记(7) —— path, wpath 1. 简介     使用C++编程,经常涉及到对文件的相关操作,例如,判断文件是否存在、获取文件所在的路径名、遍历某个目录下的所有文件、创建新的目录等。在旧风格的C++编程中,一般通过操作系统提供的API、字符串操作等实现上述功能。     C++11 提供的 头文件提供了丰富的文件操作的类和函数。filesystem 库是一个可一直的文件系统操作相关的库,使用POSIX标准表示文件系统的路径 阅读详情

相关推荐

基于c++11 的filesystem库

一般程序设计都有访问文件系统的需求,什么列出目录啦,删除,创建目录啦,自己写老费劲了,又要考虑跨平台实现,费心伤神。 c++17把这个给统一了,加了个filesystem,但是对于不想用或不能用c++17的人就麻烦了。 这里有个轮子可以拿去用,基于c++11实现,与c++17兼容。非常好用。 项目地址:https://github.com/gulrak/filesystem/ 使用示例: 参见https://github.com/gulrak/filesystem/blob/mast...

闲人的专栏 8244

【C++总结】11:文件操作

程序运行时产生的数据都属于临时的数据,随着程序运行的结束都会被释放,可以通过文件将数据持久化。文件流。

https://blog.youkuaiyun.com/m0_74834215 1608

让C++处理JSON类型配置文件更轻松-Hjson-cpp详解

Hjson-Cpp是一个C++实现的Hjson解析库,支持JSON扩展格式,适用于配置文件场景。主要特性包括:支持注释、多行字符串和无引号键名等友好语法;提供与JSON互转能力;轻量级实现仅依赖C++11标准库。文章详细介绍了安装方法、基本用法(解析字符串/文件、数据访问)、常用API、错误处理及性能优化建议,并包含高级特性如类型安全访问、文件操作和自定义解析规则。通过实际代码示例展示了如何集成使用该库,包括从GitHub获取源码、创建测试工程和解析配置文件的具体操作步骤。该库简化了C++项目中处理Hjso

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 1300

文件操作

/* ## 5 文件操作 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放 通过**文件可以将数据持久化** C++中对文件操作需要包含头文件 < fstream > 文件类型分为两种: 1. **文本文件** - 文件以文本的**ASCII码**形式存储在计算机中 2. **二进制文件** - 文件以文本的**二进制**形式存储在计算机中,用户一般不能直接读懂它们 操作文件的三大类: 1. ofstream:写操作 2. ifstream: 读操作 3. fstre

SSunshaoye的博客 378

c++:进阶语法总结

本文摘要: C++中阶学习聚焦高级特性与OOP编程,涵盖面向对象核心概念(封装、继承、多态)、智能指针内存管理、STL进阶用法(容器/算法/迭代器)、现代C++特性(11/14/17标准)、异常处理、多线程编程、文件操作及模板编程。重点包括虚函数机制、移动语义、lambda表达式、线程同步技术等,旨在培养编写复杂程序能力,为系统级开发奠定基础。特别注意现代C++在资源管理、并发编程方面的改进,如智能指针解决内存泄漏、std::async简化异步任务等实践要点。

2402_88047672的博客 938

基于Matlab与Bladed联合仿真的交互软件设计

基于Matlab与Bladed的交互软件设计

weixin_45014222的博客 815

C++基础知识(十一)--- 文件读写

由于文件设备并不像显示器屏幕与键盘那样是标准默认设备,所以它在fstream头文件中是没有像cout那样预先定义的全局对象,所以我们必须自己定义一个该类的对象。

woshizuopie的博客 1500

谈谈人大金仓数据库

人大金仓数据库(Kingbase)是国产自主研发的关系型数据库管理系统,兼容主流数据库语法,支持高并发、高安全性及国产化适配。该数据库提供完整的安装部署方案,包括环境准备、初始化配置和验证流程,并配备专业的数据迁移工具(KDMS)实现从Oracle/MySQL等数据库的平滑迁移。系统提供KStudio等图形化管理工具,支持性能监控、备份恢复等运维功能,同时具备性能调优、高可用架构、分区表管理等高级特性,满足政府、金融等领域的企业级需求。

蜚鸣的博客 2092

【C++】C++核心编程(十一)文件操作

C++核心编程

qq_43723025的博客 4634

qt使用qxlsx实现xlsx、xls表格文件快速写入和读取

新年第二篇文章,收尾一个去年计划中发表文章和实现功能。

kbq的博客 1万+

JSSIP实战:5分钟搞定WebRTC电话功能(附完整代码示例)

本文通过JSSIP库实战演示如何在Web应用中快速集成WebRTC电话功能。文章提供了从环境准备、SIP服务器连接到完整代码示例的详细步骤,涵盖用户注册、拨号接听、媒体流处理等核心环节,并针对常见问题给出排查方案,帮助开发者高效实现网页端实时语音通信。

u8v9w0x1y的博客 517

C++核心编程:P11->文件操作

本系列文章为黑马程序员C++教程学习笔记,前面的系列文章链接如下 C++核心编程:P1->程序的内存模型 C++核心编程:P2->引用 C++核心编程:P3->函数提高 C++核心编程:P4->类和对象----封装 C++核心编程:P5->类和对象----对象的初始化和清理 C++核心编程:P6->类和对象----C++对象模型和this指针 C++核心编程:P7->类和对象----友元 C++核心编程:P8->类和对象----运算符重载 C++核心编程:P9->类和对象----继承 C++核心编程:P10

InnerPeaceHQ的博客 985

AVM环视:系统搭建整体流程

文章目录前言一、畸变矫正鱼眼相机二、透视变换三、图像拼接四、图像融合总结 前言 由于正在做AVM环视,所以记录一下整个过程,归纳为一个系列文章,并对期间遇到的错误进行归纳整理。本文主要概括了AVM环视的大致流程和逻辑,不涉及代码部分,仅供思路参考,其中涉及的具体技术会在后期整理为小章节进行分析。 一、畸变矫正 鱼眼相机 做环视基本上使用到的是鱼眼照片,因为鱼眼相机的视角范围可以达到220°到230°,所以一个相机就可以采集到一个面的全部信息,例如汽车具有四个面,那么在汽车的前后左右分别安装一个鱼眼相机.

qq_34468890的博客 6535

c语言输出log到文件路径,C/C++知识点之打印并输出 log/日志到文件(C++)

本文主要向大家介绍了 C/C++知识点之打印并输出 log/日志到文件(C++),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。#include#defineMAX_LEN1024booldebug_mode;//使用方法同printfvoidlprintf(constchar*fmt,...){staticboolprint_time=true;...

weixin_39843093的博客 2214

AI测试实战:用文心一言5分钟生成登录功能测试用例(附Excel模板)

本文详细介绍了如何利用AI工具(如文心一言)在5分钟内高效生成登录功能测试用例,并提供了可直接应用的Excel模板。通过对比传统手工编写与AI生成的效率差异,展示了AI在软件测试领域的巨大优势,包括减少重复劳动、避免边界条件遗漏和提升格式标准化。文章还包含实战技巧、高级应用方案和行业最佳实践,助力测试人员快速提升工作效率。

weixin_30379531的博客 410

VMware ESXi 系统里创建虚拟机,虚拟磁盘日志损坏,如何或者把数据备份?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1636

C++新手实战:从零构建控制台猜数字游戏

在编程学习初期,理解核心语法与逻辑控制是构建扎实基础的关键。C++作为一门高效的系统级编程语言,其变量、循环、函数等基础概念是掌握更复杂技术的基石。通过实践小型项目,开发者能直观体会从算法设计到代码实现的完整流程,这对于巩固语法知识、培养调试能力具有重要价值。本文以经典的猜数字游戏为例,详细拆解了其核心逻辑,并重点探讨了如何利用srand()和rand()函数生成可靠的随机数,以及通过do...while循环和布尔变量构建健壮的游戏流程。这种将基础语法与项目实践相结合的方式,尤其适合初学者在控制台环境中快速

weixin_30875157的博客 369

智慧社区:安防系统解决方案

智慧社区:安防系统解决方案

s13166803785的博客 431

【C++核心编程-11】----C++之文件操作实战

在C++中,文件操作是一种重要的功能,它使程序能够读取和写入外部文件,从而实现数据的持久化存储和共享。

一伦明悦的博客 1675

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

modern-cpp-features学习路线:从C++11到C++20系统学习路径

想要系统学习现代C++语言特性?modern-cpp-features项目为你提供了从C++11到C++20的完整学习路线图!🚀 这个开源项目详细记录了每个C++版本引入的新特性,帮助你从基础到高级循序渐进地掌握现代C++编程。本文将为你详细介绍这个宝贵的学习资源,帮助你规划高效的学习路径。 ## 为什么选择modern-cpp-features项目? **modern-cpp-featur

gitblog_00608的博客 815

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++语言的文件操作

C++语言的文件操作提供了丰富的功能,可以方便地处理文本文件和二进制文件。掌握文件操作的技巧对于编写实际应用程序是非常重要的。通过适当使用输入输出流、异常处理和文件模式,开发者可以轻松实现复杂的文件操作需求。在实际应用中,应根据项目的需求选择合适的文件格式(文本或二进制)以及合适的文件操作方式。希望本文能够帮助读者更深入地理解和掌握C++语言的文件操作。

2401_90032167的博客 698

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

70 CPP 文件操作

d)不要以文本模式打开二进制文件,也不要用行的方法操作二进制文件,可能会破坏二进制数据文件的格式,也没有必要。(因为二进制文件中的某字节的取值可能是换行符,但它的意义并不是换行,可能是整数n个字节中的某个字节)当输入流操作未能读取预期的字符时,将设置failbit(非致命错误,可挽回,一般是软件错误,例如:想读取一个整数,但内容是一个字符串;c++存储整数的时候,需要4字节的内存空间,并且4字节要作为一整体来安排,把下面长长的二进制存进去,如果把每个字节分开来看,分别是(从右往左)97,1,2,0。

wade1010的专栏 1050

【探索Linux】P.11(基础IO,文件操作)

根据上文的章节目录,本文主要介绍了 C 语言、C++ 和 Linux 系统中的文件操作实现方法。其中,C 语言提供了一组用于文件操作的标准库函数,如open()、write()、read()、close()等。C++ 的文件操作依赖于标准库中的fstream,使用fstream类可以方便地进行文件的打开、读取、写入和关闭等操作,并且文件流对象也提供了一些基本的文件操作函数。可以通过这些方法实现对文件的基本操作,例如创建、打开、读写等。

Yawesh的博客 1675

视频教程-征服C++ 11视频精讲-C/C++

征服C++ 11视频精讲 东北大学计算机专业硕士研究生,欧瑞科技创始人&CE...

weixin_29214471的博客 1311

边用llama.cpp边学C++:Windows 11下真实工程驱动的入门路径

C++是一门强工程导向的语言,其核心价值在于对内存、硬件和系统资源的直接掌控。理解std::vector的RAII语义、std::thread的生命周期管理、CUDA与CPU协同的构建逻辑,远比孤立记忆语法更重要。llama.cpp作为轻量级但工业级的大模型推理引擎,天然融合了现代C++关键特性(如constexpr、模板元编程、跨平台条件编译)与底层实践(mmap内存映射、AVX指令对齐、OpenMP并发优化),成为连接语法知识与真实系统行为的理想桥梁。尤其在Windows 11 + CUDA环境下,从编

weixin_33700350的博客 407
上一篇: 《C++进阶--10.多态》
下一篇: 《什么是预处理?》
程序猿!=程序员
博客等级 码龄7年 1174粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿!=程序员

感谢来过,感谢有你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值