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…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
