C++ 文件和流
iostream 标准库提供了 cin 和 cout 方法,用于从标准输入读取流和向标准输出写入流。而从文件中读取流或向文件写入流,需要用到fstream标准库。在 C++ 中进行文件处理时,须在源代码文件中包含头文件 <iostream> 和 <fstream>。fstream标准库定义了三个新的数据类型:
| 数据类型 | 描述 |
|---|---|
| ofstream | 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 |
| ifstream | 该数据类型表示输入文件流,用于从文件读取信息。 |
| fstream | 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,也可以从文件中读取信息。 |
打开文件
从文件中读取信息或向文件写入信息之前,必须先打开文件。ofstream 和 fstream 对象都可以用来打开文件进行写操作。若只需要打开文件进行读操作,则使用 ifstream 对象。
打开文件需要用到open() 函数,open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。下面是 open() 函数的标准语法,
void open(const char *filename, ios::openmode mode);
第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式,如下所示:
| 模式标志 | 描述 |
|---|---|
| ios::app | 追加模式。所有写入都追加到文件末尾。 |
| ios::ate | 文件打开后定位到文件末尾。 |
| ios::in | 打开文件用于读取。 |
| ios::out | 打开文件用于写入。 |
| ios::trunc | 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。 |
模式可以多种结合使用。例如,以写入模式打开文件,并截断文件,以防文件已存在,可以使用下面的语法:
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );
若要打开一个文件用于读写,可以使用下面的语法:
ifstream afile;
afile.open("file.dat", ios::out | ios::in );
注意:需留意第一个参数的输入形式,例如file.dat文件在D盘中的位置为:D:\KSWJJ\file.dat ,则输入格式为:
outfile.open("D://KSWJJ//app.dat");
别写成 "D:/KSWJJ/file.dat" 或者 “D:\KSWJJ\file.dat”。
写入文件
C++ 编程中使用流插入运算符( << )向文件写入信息,就像使用该运算符输出信息到屏幕上一样。唯一的不同是这里使用的是 ofstream 或 fstream 对象,而不是 cout 对象。
读取文件
C++ 编程中使用流提取运算符( >> )从文件读取信息,就像使用该运算符从键盘输入信息一样。唯一的不同是这里使用的是 ifstream 或 fstream 对象,而不是 cin 对象。
关闭文件
程序终止时,会自动关闭、刷新所有流,释放所有分配的内存,并关闭所有打开的文件。但在程序终止前关闭所有打开的文件是个好习惯。
close() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。 close() 函数的标准语法如下所示:
void close();
读取 & 写入实例
以读写模式打开一个文件,在向文件 afile.dat 写入用户输入的信息之后,程序从文件读取信息,并将其输出到屏幕上:
#include <iostream>
#include <fstream>using namespace std;int main ()
{ char data[100];ofstream outfile;outfile.open("afile.dat"); // 以写模式打开文件cout << "Writing to the file" << endl;cout << "Enter your name: "; cin.getline(data, 100); // cin.getline接受一个字符串,遇到空格停止,接收空格并输出outfile << data << endl; // 向文件写入用户输入的数据 cout << "Enter your age: "; cin >> data;cin.ignore(); //将输入过后按下的回车给忽略掉 outfile << data << endl; // 再次向文件写入用户输入的数据outfile.close(); // 关闭打开的文件ifstream infile; infile.open("afile.dat"); // 以读模式打开文件cout << "Reading from the file" << endl; infile >> data; cout << data << endl; // 输出从文件中读取的数据在屏幕上infile >> data; // 再次从文件读取数据,并显示它cout << data << endl; infile.close(); // 关闭打开的文件return 0;
}
执行结果如下:

这里需要注意的是getline()函数从外部读取一行,遇到空格或换行截止。ignore() 函数会忽略掉之前读语句留下的多余字符。cin.ignore()的默认参数为cin.ignore(1,EOF) ,其中 EOF是end of file的缩写,表示"文字流"(stream)的结尾。cin.ignore() 的原型是:
cin.ignore(int n, char a);
ignore() 函数从输入流 (cin) 中提取字符,提取的字符被忽略 (ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到 n 或者被抛弃的字符是 a,则 cin.ignore()函数执行终止,否则,它继续等待。
ignore() 常用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。通常把第一个参数设置得足够大,这样实际上总是只有第二个参数 \n 起作用,例如:
cin.ignore(1024,'\n');
所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去,如下所示:
#include <iostream>
using namespace std;int main()
{int a,b,c;cout<<"input a:";cin>>a;cin.ignore(1024, '\n');cout<<"input b:";cin>>b;cin.ignore(1024, '\n');cout<< "input c:";cin>> c;cout<< a << "\t" << b << "\t" << c << endl;return 0;
}
文件位置指针
文件位置指针是一个整数值,指定了从文件的起始位置到指针所在位置的字节数。istream 和 ostream 都提供了用于重新定位文件位置指针的成员函数。这些成员函数包括关于 istream 的 seekg(seek get)和关于 ostream 的 seekp(seek put)。
seekg() 和 seekp() 的参数通常是一个长整型。第二个参数可以用于指定查找方向,可以是以下几种类型:
- ios::beg,默认的,从流的开头开始定位;
- ios::cur,从流的当前位置开始定位;
- ios::end,从流的末尾开始定位;
下面是关于定位 "get" 文件位置指针的实例:
// 定位到 fileObject 的第 n 个字节(默认是 ios::beg)
fileObject.seekg( n );// 把文件的读指针从 fileObject 当前位置向后移 n 个字节
fileObject.seekg( n, ios::cur );// 把文件的读指针从 fileObject 末尾往回移 n 个字节
fileObject.seekg( n, ios::end );// 定位到 fileObject 的末尾
fileObject.seekg( 0, ios::end );
相关文章:
C++ 文件和流
iostream 标准库提供了 cin 和 cout 方法,用于从标准输入读取流和向标准输出写入流。而从文件中读取流或向文件写入流,需要用到fstream标准库。在 C 中进行文件处理时,须在源代码文件中包含头文件 <iostream> 和 <fstream>。fstr…...
案例分享:西河水库安全监测信息化系统实施方案
一、项目概述1.1项目背景西河水库信息化工作已开展多年,但是由于西河水库监测设备都已经老化或者损坏,现有设备已渐渐不能满足新时期西河水库信息化和现代化发展需求。因此,灌区管理局拟在运用现代信息和通信技术手段感测、分析、整合水库运行…...
使用Angular和MongoDB来构建具有登录功能的博客应用程序
Angular 是一个一站式框架,用于使用相同的可重用代码创建移动和 Web 应用程序。使用 Angular,您可以将整个应用程序划分为可重用的组件,从而更轻松地维护和重用代码。 在本教程系列中,您将学习如何开始使用 Angular 和 MongoDB 作…...
ChatGPT 与前端技术实现制作大屏可视化
像这样的综合案例实分析,我们可以提供案例,维度与指标数据,让ChatGPT与AIGC 帮写出完整代码,并进行一个2行2列的布局设置。 数据与指令如下: 商品名称 销量 目标 完成率 可乐 479 600 79.83% 雪碧 324 600 54.00% 红茶 379 600 63.…...
视频监控/视频云存储EasyCVR平台接入华为ivs3800平台提示400报错,如何解决?
开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,视频云存储/安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频…...
c++基础数据结构
基础数据结构 目录 • 线性结构 • 二叉堆 • 并查集 • 哈希表 • 应用举例 一、线性结构 基础知识 • 数组 • 带头结点的双链表 – He a d 结点 : 虚拟头结点 – Fir s t 结点 : 第一个有实际内容的结点 • 队列 : 循环队列与 Open-Close 表 例 1. 最…...
微服务-sentinel详解
文章目录 一、前言二、知识点主要构成1、sentinel基本概念1.1、资源1.2、规则 2、sentinel的基本功能2.1、流量控制2.2、熔断降级 3、控制台安装3.1、官网下载jar包3.2、启动控制台 4、项目集成 sentinel4.1、依赖配置4.2、配置文件中配置sentinel控制台地址信息4.3、配置流控4…...
【MTK平台】根据kernel log分析wifi 连接的时候流程
一 概要: 本文主要讲解根据kernel log分析下 当前路径下(vendor/mediatek/kernel_modules/connectivity/wlan/core/gen4m/)wifi scan的时候代码流程 二. Log分析: 2.1)可以知道WiFi在连接的时候先通过scanSearchBssDescByScoreForAis方法扫描捕获到了需要连接的SSID &q…...
【SpringBoot】两种配置文件, 详解 properties 和 yml 的语法格式, 使用方式, 读取配置
文章目录 前言一、配置文件的作用二、两种配置文件格式1, properties 格式语法2, properties 格式缺点3, yml 格式语法4, yml 格式缺点5, yml 支持更多类型 三、配置文件的读取三、不同环境下的配置文件总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助…...
基于微信小程序的文化宣传平台的设计与实现(Java+spring boot+微信小程序+MySQL)
获取源码或者论文请私信博主 演示视频: 基于微信小程序的文化宣传平台的设计与实现(Javaspring boot微信小程序MySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java…...
一款windows的终端神奇,类似mac的iTem2
终于找到了一款windows的终端神奇。类似mac的iTem2 来,上神器 cmder cmder是一款windows的命令行工具,就是我们的linux的终端,用起来和linux的命令一样。所以我们今天要做的是安装并配置cmder 二、问题解决 1、方式一:降低scala版本 可以选择降低Scala的版本&…...
探秘二叉树后序遍历:从叶子到根的深度之旅
本篇博客会讲解力扣“145. 二叉树的后序遍历”的解题思路,这是题目链接。 本题的思路是: 先创建一个数组,用来存储二叉树后序遍历的结果。数组的大小跟树的结点个数有关。树的结点个数可以使用递归实现,即总个数左子树结点个数右…...
2023全国大学生数学建模A题思路+模型+代码+论文(比赛开始后持续更新)
目录 1.A题思路模型:9.7晚上比赛开始后,第一时间更新,获取见文末名片 3 全国大学生数学建模竞赛常见数模问题常见模型分类 3.1 分类问题 3.2 优化问题 详细思路见此名片,开赛第一时间更新 1.A题思路模型:9.7晚上比…...
从输入URL到页面展示过程:深入解析网络请求与渲染
推荐阅读 项目实战:AI文本OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 史上最全文档AI绘画stablediffusion资料分享 AI绘画关于SD,MJ,GPT,SDXL百科全书 AI绘画 stable …...
Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例,并做可视化UI界面展示(附源码)
Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例(附源码)。 为了增强程序的可观测性,方便问题定位,在发起数据库操作请求时我们也可以调用代码统一集成链路跟踪的能力,Jaeger 是当今比较流行的选择。使用 Gorm 来将操作信息集成到 Jaeger 中。 全面…...
【JavaScript精通之道】掌握数据遍历:解锁现代化遍历方法,提升开发效率!
🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📚 前言 📘 1. reduce方法 📘 2. forEach方法 📘 3. map方法…...
opencv android sdk 使用中的问题
Plugin with id ‘kotlin-android’ not found 在build.gradle(:app)中添加以下内容 buildscript {ext {Kotlin_Verion "1.9.10"}dependencies {classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$Kotlin_Verion"}repositories {mavenCentral()} …...
《向量数据库指南》——向量数据库与人工智能是一对“双生子
在信息化社会中,数据的产生、储存和处理都成为了现代生活和工作中不可或缺的一部分。在这背景下,向量数据和向量数据库出现并发展起来,为我们解决了大量的问题,但同时也引出了新的问题和挑战。 首先,我们需要明白什么是向量数据。在人工智能时代,传统的结构化数据(如文本…...
WebSocket协议
WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输 HTTP协议和WebSocket协议对比: HTTP是短连接WebSocket是长连接HT…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
