c++文件操作 (1) -- 读写文件
目录
为什么使用文件操作
文件输入流和输出流 -- 相对于内存而言
文件操作
1. 文件操作常用类以及头文件
2. 文件输入流(写文件操作)
1. 写文本文件
1)文件操作是使用对象来实现的
2)文件输出
3)打开文件
open函数 :
2. 读文本文件
3. 写二进制文件
4. 读二进制文件
为什么使用文件操作
我们平常在程序中经常需要用户输入相应的数据,但是这些数据在用户输入之后, 是在内存中存储,当程序结束之后,这些数据就会消失。当下次执行程序的时候,用户还需要再次输入信息。
但是,大多数时候,我们希望在用户输入信息时就将用户输入的数据进行存储,当程序再次执行的时候使用之前输入的数据。 虽然我们输入数据之后,数据会存储在内存当中,但是内存是无法长久存储数据的。 内存只有程序执行的时候会存放数据,在程序执行结束之后,就不会在保存数据了。 所以,我们想要存储数据就得需要其它的东西。
此处,我们使用的是文件--可以永久的存储数据,其实在我们使用电脑的过程中,就已经在使用文件了,这些文件是存储在硬盘中的,特点就是,可以永久的存储数据,但是存取的速度会很慢。
我们所说的文件操作,就是将数据中输入和产生的信息存储到文件当中,实现永久保存数据。
我们在执行程序的时候需要将程序需要的数据从文件中导入到内存,然后供程序在正常执行。
文件输入流和输出流 -- 相对于内存而言
我们要将程序中产生的数据存储到文件中,并且还需要在程序执行的时候将文件中的数据读入到程序(内存)。 这就涉及到了读文件和写文件的操作。
其实很好理解,我们可以将读文件理解为: 程序和文件之间建立一个通道,将文件中的数据顺着通道流到程序(内存)中,这就是文件输入流。
那么相反,写文件就是将数程序中的数据由通道流到文件中,这就是文件输出流。
文件输入流和文件输出流,可以从内存的角度,从内存流出 -- 输出流, 流入内存 -- 输入流。
文件操作
1. 文件操作常用类以及头文件
c++文件操作首先需要导入头文件 <fstream> 。
文件的输入输出属于c++IO流的一部分,c++将输入输出的信息封装在类中,根据需求进行了相应的封装。主要使用的有,istream(inputstream): 输入流, ostream(outputstream): 输出流,iostream(输入流和输出流结合,多继承上面两个类)。
而对于文件,主要有ifstream(f表示file): 文件输入流, ofstream : 文件输出流, fstream: 文件输入输出流。
输出流包含文件流(上面文件流都是对应IO流的子类),为了方便使用,继承出对文件操作的类。
2. 文件输入流(写文件操作)
1. 写文本文件
#include <iostream>
#include <stdlib.h>
#include <fstream>using namespace std;int main(void) {/*实现写文本文件*/ofstream io;io.open("data.txt");// 文件没有打开成功,则结束程序if (!io.is_open()) return 1; io << "好好学习" << endl;io.close();system("pause");return 0;
}
上面代码中对文本文件data.txt写入了"好好学习"。
1)文件操作是使用对象来实现的
我们使用文件流的类对象对文件进行操作: ofstream io; // 定义了ofstream类对象,用来操作文件输出。
2)文件输出
ofstream和fstream都可以用来实现输出到文件的操作,如果会是输出的话,建议使用专门用来输出的ofsream
3)打开文件
对文件操作,必须得打开文件,使用定义的对象io,调用打开文件的接口open,来打开文件。
open函数 :
1. 一般使用前两个参数,第一个参数指定打开的文件,第二个参数指定打开的方式
2. 文件打开方式:
| ios::in | 读方式打开文件 |
| ios::out | 写方式打开文件 |
| ios::trunc | 如果文件存在,将文件的长度截取为0(就是将原来内容都删除掉) |
| ios::app | 尾部追加方式(从文件的尾部写入) |
| ios::ate | 文件打开后定位到文件尾部 |
| ios::binary | 以二进制方式打开文件(不指定,以文本方式打开文件) |
以上的所有打开方式,可以使用 | 位运算符组合起来使用。
3. open的第二个参数可以自己指定,也可以不指定,直接使用默认值。
1) ifstream是读文件的类,所以其对象调用open,第二个参数默认为ios::in
2) ofstream是写文件的类,所以其对象调用open,第二个参数默认为ios::out
3) fstream既可以读文件,也可以写文件,所以其对象调用open,第二个参数默认为,ios::in | ios::out。
4. 打开文件之后,我们就可以使用输入输出操作给文本文件中写入数据了。 io << "好好学习"; 可以将io看成此时打开的文件,将"好好学习" 流入到io中。 <<
5. 健壮性检测--文件是否打开成功(is_open())
在写代码的时候,我们应该考虑到代码的健壮性,在做一些操作的时候,应该去判断是否可以操作成功。然后再去执行相应的操作。
对于是否打开成功, 我们可以调用is_open()函数来判断,如果打开成功,返回true,反之,返回false。
if(!io.is_open()){...}; 表示文件打开失败后进行的操作。
6. 关闭文件,文件也是一种资源,当我们使用结束之后一定要将文件关闭(调用close函数) 。
2. 读文本文件
int main(void) {ifstream io;string data; // 存放从文件中读取的数据io.open("data.txt");if (!io.is_open()) return 0;io >> data;cout << data << endl;io.close();system("pause");return 0;
}
读文件和写文件很类似,只是使用输出流的类对象。 将io对应文件的数据流到(>>)data变量中(内存中)。
3. 写二进制文件
写(读)二进制文件,需以二进制形式打开文件,但是我们open默认以文本文件打开,所以需要指定打开方式。
int main(void) {ofstream io;int nub = 20;io.open("data.dat",ios::out | ios::binary);if (!io.is_open()) return 0;// 给二进制文件中写数字io.write((char*)&nub,sizeof(nub));io << "好好学习"; //给二进制文件中写字符串/字符io.close();system("pause");return 0;
}
1. 由于open默认是以文本模式打开的,我们要使用二进制模式打开文件,就需要指定后面的打开方式。ios::out | ios::binary 表示以二进制形式打开文件,并且进行写文件的操作。
2. 给二进制文件中写字符或者字符串的时候,可以和文本文件的输入输出一样,直接使用io << "字符串",给文件中写入数据。
但是,给二进制文件中写数字的时候,需要使用write函数来写。
write()函数有两个参数,第一个参数是要写入数据的地址(并且是char*的地址,所以需要进行类型转换),第二个参数是写入数据占用的字节数
为什么给二进制文件写字符串/字符和写数字不同,请看 文本文件和二进制文件的区别
4. 读二进制文件
int main(void) {ifstream io;int nub;string data;io.open("data.dat", ios::in | ios::binary);if (!io.is_open()) return 0;io.read((char*)&nub, sizeof(nub));io >> data;cout << nub << " " << data;io.close();system("pause");return 0;
}
读文本文件和写文本文件类似,只是我们读文本文件中的数字的时候需要使用函数read(),其参数和write()是一样的。 读文本文件的字符串直接使用 io >> data 读取即可。
具体区别看文本文件和二进制文件的区别
相关文章:
c++文件操作 (1) -- 读写文件
目录 为什么使用文件操作 文件输入流和输出流 -- 相对于内存而言 文件操作 1. 文件操作常用类以及头文件 2. 文件输入流(写文件操作) 1. 写文本文件 1)文件操作是使用对象来实现的 2)文件输出 3)打开文件 open函数 ÿ…...
PHP操作Mysql记录数多引发的空白错误
1 错误由来 php操作三张表,一张表有近四十万条记录,另外两张表记录数在三万左右,三张表又关联。应用左连接left join。 $qLStr "select pu.pd_no, pu.common_name, pu.purchase_cost, pu.medication_area, pu.total_dosage, pu.contro…...
transformer和vit学习笔记
以下记录自己对transformer的学习笔记,可能自己看得懂【久了自己也忘了看不懂】,别人看起来有点乱。以后再优化文档~ 小伙伴请直接去看学习资源: Transformer的理解T-1_哔哩哔哩_bilibili 首先,时序处理:一些模型的出…...
人脸识别 FaceNet人脸识别(一种人脸识别与聚类的统一嵌入表示)
人脸识别 FaceNet人脸识别(一种人脸识别与聚类的统一嵌入表示) FaceNet的简介Facenet的实现思路训练部分 FaceNet的简介 Facenet的实现思路 import torch.nn as nndef conv_bn(inp, oup, stride 1):return nn.Sequential(nn.Conv2d(inp, oup, 3, stride…...
Python tkinter (6) Listbox
Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 GUI 目录 Listbox 创建listbox 添加元素…...
优雅的python(二)
🌈个人主页:小田爱学编程 🔥 系列专栏:c语言从基础到进阶 🏆🏆关注博主,随时获取更多关于c语言的优质内容!🏆🏆 😀欢迎来到小田代码世界~ &#x…...
Git安装详细步骤
目录 1、双击安装包,点击NEXT编辑 2、更改安装路径,点击NEXT 3、选择安装组件 4、选择开始菜单页 5、选择Git文件默认的编辑器 6、调整PATH环境 7、选择HTTPS后端传输 8、配置行尾符号转换 9、配置终端模拟器与Git Bash一起使用 10、配置额外…...
首发:2024全球DAO组织发展研究
作者,张群(专注DAO及区块链应用研究,赛联区块链教育首席讲师,工信部赛迪特邀资深专家,CSDN认证业界专家,微软认证专家,多家企业区块链产品顾问) DAO(去中心化自治组织&am…...
【大数据】详解 Flink 中的 WaterMark
详解 Flink 中的 WaterMark 1.基础概念1.1 流处理1.2 乱序1.3 窗口及其生命周期1.4 Keyed vs Non-Keyed1.5 Flink 中的时间 2.Watermark2.1 案例一2.2 案例二2.3 如何设置最大乱序时间2.4 延迟数据重定向 3.在 DDL 中的定义3.1 事件时间3.2 处理时间 1.基础概念 1.1 流处理 流…...
【数据结构1-2】二叉树
树形结构不仅能表示数据间的指向关系,还能表示出数据的层次关系,而有很明显的递归性质。因此,我们可以利用树的性质解决更多种类的问题。 但是在平常的使用中,我们并不需要使用这么复杂的结构,只需要建立一个包含int r…...
ajax点击搜索返回所需数据
html 中body设置(css设置跟进自身需求) <p idsearch_head>学生信息查询表</p> <div id"div_1"> <div class"search_div"> <div class"search_div_item"> …...
Redis6基础知识梳理~
初识NOSQL: NOSQL是为了解决性能问题而产生的技术,在最初,我们都是使用单体服务器架构,如下所示: 随着用户访问量大幅度提升,同时产生了大量的用户数据,单体服务器架构面对着巨大的压力 NOSQL解…...
在Python中如何使用集合进行元素操作
目录 1. 创建集合 2. 添加或删除元素 3. 集合运算 4. 其他集合操作 总结 在Python中,集合(set)是一种基本的数据结构,用于存储无序且唯一的元素。这意味着集合中的每个元素都是独一无二的,且集合不保持任何元素的…...
2024年阿里云幻兽帕鲁Palworld游戏服务器优惠价格表
自建幻兽帕鲁服务器租用价格表,2024阿里云推出专属幻兽帕鲁Palworld游戏优惠服务器,配置分为4核16G和4核32G服务器,4核16G配置32.25元/1个月、10M带宽66.30元/1个月、4核32G配置113.24元/1个月,4核32G配置3个月339.72元。ECS云服务…...
Atlassian Confluence Data Center and Server 权限提升漏洞复现(CVE-2023-22515)
0x01 产品简介 Atlassian Confluence是一款由Atlassian开发的企业团队协作和知识管理软件,提供了一个集中化的平台,用于创建、组织和共享团队的文档、知识库、项目计划和协作内容。是面向大型企业和组织的高可用性、可扩展性和高性能版本。 0x02 漏洞概述 Atlassian Confl…...
打开 IOS开发者模式
前言 需要 1、辅助设备:苹果电脑; 2、辅助应用:Xcode; 3、准备工作:苹果手机 使用数据线连接 苹果电脑; 当前系统版本 IOS 17.3 通过Xcode激活 两指同时点击 Xcode 显示选择,Open Develop…...
【C语言刷题系列】交换两个变量的三种方式
文章目录 1.使用临时变量(推荐) 2.相加和相减的方式(值较大时可能丢失数据) 3.按位异或运算 本文所属专栏C语言刷题_倔强的石头106的博客-CSDN博客 两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的…...
架构师之路(十五)计算机网络(网络层协议)
前置知识(了解):计算机基础。 作为架构师,我们所设计的系统很少为单机系统,因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。 ARP协议 地址解…...
【JSON2WEB】03 go的模板包html/template的使用
Go text/template 是 Go 语言标准库中的一个模板引擎,用于生成文本输出。它使用类似于 HTML 的模板语言,可以将数据和模板结合起来,生成最终的文本输出。 Go html/template包实现了数据驱动的模板,用于生成可防止代码注入的安全的…...
3 JS类型 值和变量
计算机对value进行操作。 value有不同的类型。每种语言都有其自身的类型集合。编程语言的类型集是该编程语言的基本特性。 value需要保存一个变量中。 变量的工作机制是变成语言的另一个基本特性。 3.1概述和定义 JS类型分为: 原始类型和对象类型。 原始类型&am…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
