【C++第二阶段】文件操作

以下内容仅为当前认识,可能有不足之处,欢迎讨论!


文章目录

    • 文件操作
      • 文件写入流程
        • 简单的demo写操作
      • 文件读流程
      • 二进制写文件
      • 二进制读文件


文件操作

文件写入流程

写文件包括以下几个步骤

1.包含头文件

2.创建流对象

3.打开文件,以指定方式

4.写入内容

5.关闭文件

1.头文件一般用

ofstream(写文件) ——从编译器中向文件写,故为output-file-stream,

ifstream(读文件)——从文件中向编译器读,故为in-file-stream,

fstream(读写文件)——从文件中可以读出数据,也可以将编译器中的数据写入文件,故为file-stream。

流对象一般用对应头文件的对象。

指定方式有表格,可以指定多种,用|来分割。

模式标志描述
ios::app追加模式。所有写入都追加到文件末尾
ios::ate文件打开后定位到文件末尾
ios::in打开文件用于读取
ios::out打开文件用于写入
io::trunc如果该文件已经存在,内容将在打开文件之前被截断,即把文件长度设置为0

写入内容是左移运算符

关闭文件一般是close()函数

简单的demo写操作

代码

#include<iostream>
using namespace std;
#include<string>
#include<fstream>void test0226_0() {/*写文件包括以下几个步骤1.包含头文件2.创建流对象3.打开文件,以指定方式4.写入内容5.关闭文件头文件一般用ofstream , ifstream , fstream流对象一般用对应头文件的对象指定方式有表格,可以指定多种,用|来分割写入内容是左移运算符关闭文件一般是close()函数*///1.创建流对象fstream fs;//2.打开文件及指定打开方式fs.open("file.txt", ios::app);cout << "打开成功文件成功,对其写入数据." << endl;fs << "打开一个文件,对其写入" << endl;cout << "写入文件成功,关闭文件." << endl;fs.close();cout << "关闭文件成功." << endl;}int main() {cout << "hello ! world ! " << endl;test0226_0();system("pause");return 0;}

运行结果:

image-20240226094431017

image-20240226094446172

可以看到成功写入。

文件读流程

文件读流程有4种方式。

①通过右移运算符放入字符数组中;

ifstream ifs;
ifs.open("file.txt",ios::in);
if (!ifs.is_open()){return;
}
char char_arry[1024]={0};
while (ifs>>char_array){cout<<char_array<<endl;
}
ifs.close();

②通过文件流对象自带的getline函数用字符数组逐行接收;

ifstream ifs;
ifs.open("file.txt",ios::in);
if(!ifs.is_open()){return ;
}
char char_array[1024]={0};
while (ifs.getline(char_array,sizeof(char_array))){cout<<char_array<<endl;
}
ifs.close();

③通过string头文件自带的全局getline函数用string函数接收;

ifstream ifs;
ifs.open("file.txt" , ios::in);
if(!ifs.is_open()){return ;
}
string array;
while(getline(ifs , array)){cout<<array<<endl;
}
ifs.close();

④通过文件流对象逐个读取字符打印。

ifstream ifs;
ifs.open("file.txt" , ios::in);
if(!ifs.is_open()){return ;
}
char c;
while(c=ifs.get() && ifs.get()!= EOF){cout<<c<<endl;
}
ifs.close();

最后种方式我打印不出来。

image-20240226110648748

二进制写文件

二进制方式对文件写入

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

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

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

在用二进制方式写文件时,不必拘泥于固有的数据类型,也可以写入自定义的数据类型,比如类。但对于字符串,最好还是用char来写,因为底层是用C实现的。

代码实现:

#include<iostream>
#include<fstream>
using namespace std;
class Person{public:char name[1024];int age;
};
void test0226(){//1.写入头文件//2.定义文件流fstream fs;//3.打开文件fs.open("Person.txt" , ios::out | ios::binary);//这里可以直接写成,有对应的构造函数//fstream fs("Person.txt" , ios::in | ios::binary);//4.写入数据Person person={"张三",20} ;//person.name = "张三";//这里不对,不能这样写//person.age = 20;fs.write((const char *)&person , sizeof(person));//这里必须用强制类型转换,为什么要用引用,因为要获取地址fs.close();
}

可以看到确实有这个文件

image-20240226114134310

二进制读文件

二进制方式读取文件,函数原型:istream read(char *buffer , int len);,参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数。

代码:

#include<iostream>
#include<fstream>
using namespace std;
class Person{public:char name[64];int age;
};
void test0226_3() {ifstream inBuffer;inBuffer.open("Person.txt", ios::in | ios::binary);if (!inBuffer.is_open()) {return;}Person person;inBuffer.read((char*)&person, sizeof(person));cout << "person.name = " << person.name << ",person.age = " << person.age << "." << endl;inBuffer.close();
}int main() {cout << "hello ! world ! " << endl;test0226_3();system("pause");return 0;
}

运行结果如下

image-20240226115140401


以上是我的学习笔记,希望对你有所帮助!
如有不当之处欢迎指出!谢谢!

学吧,学无止境,太深了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/303534.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

41-软件部署实战(中):IAM系统生产环境部署实战

下面四个步骤来部署IAM应用&#xff1a; 在服务器上部署IAM应用中的服务。配置Nginx&#xff0c;实现反向代理功能。通过反向代理&#xff0c;我们可以通过Nginx来访问部署在内网的IAM服务。配置Nginx&#xff0c;实现负载均衡功能。通过负载均衡&#xff0c;我们可以实现服务…

合并两个单链表

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 但行前路&#xff0c;不负韶华&#…

【教学类-50-05】20240410“数一数”4类图片添加“难度星号”

作品展示 背景需求 前期已经制作了四类“数一数”学具&#xff0c;具体样式如下&#xff1a; 1、难度1.0 【教学类-50-01】20240407“数一数”图片样式01&#xff1a;图形与边框不重合&#xff0c;图形和其他图形不相交-CSDN博客文章浏览阅读293次&#xff0c;点赞20次&…

STL容器之unordered_set类

文章目录 STL容器之unordered_set类1、unordered系列关联式容器2、unordered_set2.1、unordered_set介绍2.2、unordered_set的使用2.2.1、unordered_set的常见构造2.2.2、unordered_set的迭代器2.2.3、unordered_set的容量2.2.4、unordered_set的增删查2.2.5、unordered_set的桶…

考研数学|武忠祥各阶段用书搭配及分享

看到有人问武忠祥老师&#xff0c;不请自来 武忠祥老师&#xff0c;绝对的宝藏老师&#xff0c;我在考研强化阶段的时候听过他的强化课程&#xff0c;听完之后&#xff0c;很多问题都想通了&#xff0c;所以&#xff0c;如果有人想问武忠祥老师行不行&#xff0c;那我就一个字…

短剧在线搜索PHP网站源码

源码简介 短剧在线搜索PHP网站源码&#xff0c;自带本地数据库500数据&#xff0c;共有6000短剧视频&#xff0c;与短剧猫一样。 搭建环境 PHP 7.3 Mysql 5.6 安装教程 1.上传源码到网站目录中 2.修改【admin.php】中&#xff0c; $username ‘后台登录账号’; $passwor…

(2022级)成都工业学院数据库原理及应用实验一:CASE工具概念数据模型建模

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、代码仅提供参考 3、如果代码不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 PowerDesigner 16.1 实验要求 某医院一个门诊部排班管理子系统涉及如下信息&#xff1a; 若干科室&a…

【.Net】Polly

文章目录 概述服务熔断、服务降级、服务限流、流量削峰、错峰、服务雪崩Polly的基本使用超时策略悲观策略乐观策略 重试策略请求异常响应异常 降级策略熔断策略与策略包裹&#xff08;多种策略组合&#xff09; 参考 概述 Polly是一个被.NET基金会支持认可的框架&#xff0c;同…

通过 Cookie、Redis共享Session 和 Spring 拦截器技术,实现对用户登录状态的持有和清理(四)

本篇内容对应 “2.5 开发登录、退出功能” 小节 “4.7 优化登陆模块” 小节 2.6 显示登录信息 2.7 账号设置 2.8 检查登录状态 登录功能的流程是什么&#xff1f; UUID为什么不会重复&#xff1f; 因为UUID是基于mac物理地址、时间戳、随机数等信息生成。因此UUID居于极高的唯…

【鸿蒙开发】ArkTS和组件

1. 初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性。 当前&#xff0c;ArkTS在TS的基础上主要扩展了如下能力&#xff1a; 基本语法&#xff1a;ArkTS定义了声明式UI描述、自…

Java事件处理机制

一、介绍 java事件处理是采取“委派事件模型”。当事件发生时&#xff0c;产生事件的对象&#xff0c;会把此“信息”传递给"事件的监听者"处理&#xff0c;这里所说的"信息"实际上就是java.awt.event事件类库里某个类所创建的对象&#xff0c;把它称为&q…

2024年AI带来的革命性变革与创新

大家好&#xff01;相信大家对于AI&#xff08;人工智能&#xff09;的发展已经有了一定的了解&#xff0c;但你是否意识到&#xff0c;到了2024年&#xff0c;AI已经变得如此强大和普及&#xff0c;带来了我们从未想象过的便利和创新呢&#xff1f;让我们一起来看看AI在这个时…

基于springboot+vue+Mysql的职称评审管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

4.9日总结

1.MySQL概述 1.数据库基本概念&#xff1a;存储数据的仓库&#xff0c;数据是有组织的进行存储 2.数据库管理系统&#xff1a;操纵和管理数据库的大型软件 3.SQL&#xff1a;操作关系型数据库的编程语言&#xff0c;定义了一套操作型数据库统一标准 2.MySQL数据库 关系型数…

数据结构---顺序表实现

目录 1.顺序表 2.动态顺序表的实现 &#xff08;4&#xff09;顺序表初始化 &#xff08;5&#xff09;顺序表销毁 &#xff08;6&#xff09;顺序表的插入 a.尾插 b.头插 &#xff08;7&#xff09;顺序表的删除 a.尾删 b.头删 &#xff08;8&#xff09;指定位置之…

GitHub 仓库 (repository) Watch - Star - Fork - Follow

GitHub 仓库 [repository] Watch - Star - Fork - Follow References 眼睛图标旁边写着 Watch 字样。点击这个按钮就可以 Watch 该仓库&#xff0c;今后该仓库的更新信息会显示在用户的公开活动中。Star 旁边的数字表示给这个仓库添加 Star 的人数。这个数越高&#xff0c;代表…

HuggingFists-如何复用流程

在使用HuggingFists进行业务流程编写时&#xff0c;很可能会发现多个流程间拥有相同的流程片段。按照通常的思考&#xff0c;如果能将这些相同的片段封装为一个可复用的子流程&#xff0c;在各个主流程中引用使用&#xff0c;就可以避免每次重复编写该片段&#xff0c;省去不必…

泰迪智能科技高职人工智能专业人才培养方案

人工智能行业近年来得到了快速发展&#xff0c;全球科技公司都在竞相投入人工智能的研发&#xff0c;从硅谷到北京&#xff0c;都在人工智能上取得了显著的进步。人工智能已经从学术研究转变为影响制造业、医疗保健、交通运输和零售等多个行业的关键因素。我国政策的积极推动下…

Windows下docker-compose部署DolphinScheduler

参照&#xff1a;快速上手 - Docker部署(Docker) - 《Apache DolphinScheduler v3.1.0 使用手册》 - 书栈网 BookStack 下载源文件 地址&#xff1a;https://dolphinscheduler.apache.org/zh-cn/download/3.2.1 解压到指定目录&#xff0c;进入apache-dolphinscheduler-xxx-…

4.2.4 理解路由器数据包过程

1、实验目的 通过本实验可以掌握&#xff1a; 了解IP路由原理了解数据包封装和解封装的概念了解路由器路由和交换过程 2、实验拓扑 观察路由器路由数据包过程的实验拓扑如图4-3所示&#xff0c;设备接口地址信息如表4-2所示。 图4-3 观察路由器路由数据包过程的实验拓扑 本…