C++核心编程之文件操作

embedded/2025/3/4 18:58:37/

C++核心编程之文件操作

        程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。因此,我们需要通过文件来将数据持久化,能够有效地将数据保存到本地电脑某个地方。

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

        文件类型分为两种

文件类型概述
文本文件文件以文本的ASCII码形式存储在计算机中
二进制文件文件以文本的二进制形式存储在计算机中

        操作文件的三个操作类别:

  • ofstream:写操作
  • ifstream: 读操作
  • fstream : 读写操作

1文本文件

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二进制方式

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

代码如下:

#include<iostream>
using namespace std;
#include<fstream>// 文本文件 写文件
void test01()
{// 1.包含头文件 fstream// 2.创建流对象ofstream ofs;// 3.指定打开方式ofs.open("test.txt", ios::out);// 4.写内容ofs<<"天上的星星"<<endl;ofs<<"地上的龟龟"<<endl;// 5.关闭文件ofs.close();}int main()
{test01();system("pause");return 0;
}

总结:

  1. 文件操作必须包含头文件fstream
  2. 读文件可以利用ofstream或者fstream类
  3. 打开文件时候需要指定操作文件的路径,以及打开方式
  4. 利用<<可以向文件中写数据
  5. 操作完毕,要关闭文件

1.2读文件

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

步骤如下:

1. 包含头文件   #include<fstream>2. 创建流对象  ifstream ifs;3. 打开文件并判断文件是否打开成功ifs.open("文件路径",打开方式);4. 读数据四种方式读取5. 关闭文件ifs.close();

代码如下:

#include<iostream>
using namespace std;
#include<fstream>
#include<string>// 文本文件 读文件
void test01()
{// 1.包含头文件 fstream// 2.创建流对象ifstream ifs;// 3.打开文件 并且判断是否打开成功ifs.open("test.txt", ios::in);if (!ifs.is_open()){cout<<"文件打开失败"<<endl;return;}// 4.读数据// 第一种读数据方法// 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)   // EOF:end of file{cout<<c;}// 5.关闭文件ifs.close();}int main()
{test01();system("pause");return 0;
}

总结:

  1. 读文件可以利用ifstream或者fstream类
  2. 利用is_open函数可以判断文件是否打开成功
  3. close 关闭文件 

2 二进制文件

2.1 写文件

        以二进制的方式对文件进行读写操作,打开方式要指定为ios::binary。二进制方式写文件主要利用流对象调用成员函数write。

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

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

代码如下:

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

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

2.2 读文件

        以二进制的方式对文件进行读写操作,打开方式要指定为ios::binary。二进制方式读文件主要利用流对象调用成员函数read。

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

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

代码如下:

#include<iostream>
using namespace std;
#include<fstream>// 二进制文件 读文件
class Person
{
public:char m_Name[64];int m_Age;
};void test01()
{// 1.包含头文件 fstream// 2.创建流对象ifstream ifs;// 3.打开文件ifs.open("test_person.txt", ios::in|ios::binary);if(! ifs.is_open()){cout<<"文件打开失败"<<endl;return;}// 4.读内容Person p;ifs.read((char *)&p, sizeof(Person));cout<<"姓名:"<<p.m_Name<<" 年龄:"<<p.m_Age<<endl;// 5.关闭文件ifs.close();}int main()
{test01();system("pause");return 0;
}

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


http://www.ppmy.cn/embedded/169991.html

相关文章

SpringBoot集成Elasticsearch 7.x spring-boot-starter-data-elasticsearch 方式

SpringBoot集成Elasticsearch 7.x | spring-boot-starter-data-elasticsearch 方式 前言添加maven依赖配置application.properties测试实体类 方式一&#xff1a;继承 ElasticsearchRepository&#xff08;适合简单查询&#xff09; 直接使用想自定义自己的Repository接口 方式…

React Native从入门到进阶详解

React Native知识框架从入门到进阶的问题。首先需要结合我搜索到的资料来整理出结构化的内容。证据中有多本书籍和文章&#xff0c;可能会涉及不同的章节和重点&#xff0c;需要仔细梳理。 首先&#xff0c;根据邱鹏源的《React Native精解与实战》将知识分为入门和进阶两大部分…

Rust语言基础知识详解【五】

继上一篇对rust所有权的讲解之后&#xff0c;本节主要对接下来的引用与借用的知识做详细的介绍。 上节中提到&#xff0c;如果仅仅支持通过转移所有权的方式获取一个值&#xff0c;那会让程序变得复杂。 Rust 能否像其它编程语言一样&#xff0c;使用某个变量的指针或者引用呢…

Java篇之继承

目录 一. 继承 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 访问父类成员 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. super和this关键字 7. 子类构造方法 8. 代码块的执行顺序 9. protected访问修饰限定符 10. 继承方式…

Spring MVC 返回数据

目录 1、什么是 SpringMVC2、返回数据2.1、返回 JSON 对象2.2、请求转发2.3、请求重定向2.4、自定义返回的内容 1、什么是 SpringMVC 1、Tomcat 和 Servlet 分别是什么&#xff1f;有什么关系&#xff1f; Servlet 是 java 官方定义的 web 开发的标准规范&#xff1b;Tomcat 是…

jenkins集成docker发布java项目

1、创建pipeline流水线任务 2、进入配置选项 选择参数化构建 3、添加2个字符参数&#xff0c;用于传递变量 4、编写pipeline脚本 //所有脚本命令都放在pipeline中 pipeline{//指定任务再哪个集群节点中执行agent any//声明全局变量&#xff0c;方便后面使用environment {harbor…

爬虫:一文掌握WebSocket爬虫案例实战

文章目录 1. WebSocket 简介1.1 什么是 WebSocket?1.2 WebSocket 的特点2. WebSocket 爬虫的基本原理3. 使用 Python 实现 WebSocket 爬虫3.1 安装依赖3.2 使用 websocket-client 实现爬虫3.3 使用 websockets 实现爬虫3.4 重连机制3.5 解析和处理消息4. 实战案例:爬取实时股…

LeetCode 面试题 17.19. 消失的两个数字

LeetCode 面试题 17.19. 消失的两个数字 思路&#x1f9d0;&#xff1a; 运用位运算&#xff0c;我们先创建一个变量tmp&#xff0c;依次异或nums和1~N所有整数&#xff0c;此时就可以得到两个数的异或值。 然后通过右移操作&#xff0c;逐位检查tmp中的每一位&#xff0c;找到…