C++(4): std::ofstream的使用

1. ofstream

之前讲到,ifstream具有将文件从硬盘中读进内存的功能。而ofstream则是执行反操作,它提供了将文件从内存写入磁盘的功能。

std::ofstream 是 C++ 标准库中用于文件输出的类,它提供了向文件写入数据的能力。std::ofstream 属于 <fstream> 头文件中定义的一部分,是继承自 std::ostream 的派生类,专门用于文件操作。使用 std::ofstream 可以以文本或二进制形式写入文件,非常适用于数据持久化、日志记录等场景。

2. 基本API

(1) open()

打开文件:在创建 std::ofstream 对象时可以直接指定文件路径打开文件,或者使用对象的 open 方法后续打开。

void open (const   char* filename,  ios_base::openmode mode = ios_base::out);

void open (const string& filename,  ios_base::openmode mode = ios_base::out);
参数:
filename:要打开的文件名
mode:要打开文件的方式
打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:
ios::app:以追加的方式打开文件
ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性
ios::binary:以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
ios::in:文件以输入方式打开(文件数据输入到内存)
ios::out:文件以输出方式打开(内存数据输出到文件)
ios::nocreate:不建立文件,所以文件不存在时打开失败
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
ios::trunc:如果文件存在,把文件长度设为0
需要注意的是,可以用“或”把以上属性连接起来,如ios::out|ios::binary,表示输出二进制到文件中。当写入一张图片时,可以这样来处理。

默认情况下,打开的是文本写入模式。

(2)close()

关闭文件:在完成文件写操作后,应该使用 close 方法关闭文件。虽然 std::ofstream 的析构函数会自动关闭文件,但显式关闭文件是一个好习惯,尤其是在文件操作可能影响程序逻辑的情况下。

(3)is_open()

检查文件是否打开成功。虽然还有fail()和good()这两个API可以检查文件打开的状态,但还是建议使用is_open()。

(4)write()

一般在写二进制数据到文件情况下用到这个API。原型如下。

ofstream& write(const char* buffer, streamsize size);

(5)运算符<<

一般在写文本数据到文件情况下用到这个API。参考如下。

ofstream ofs(“output.txt”);

ofs << “Hello World!” << std::endl;

(6)rdbuf

获取共享缓冲区指针,这个功能用的不是很多,大家了解就可以,后续将提供例程加以说明。

3. 读写文本

#include <iostream>#include <fstream>int main(int argc, char* argv[]){std::ofstream file("output.txt");file << "123" << std::endl;// 关闭文件file.close();return 0;}

4. 读写二进制

#include <iostream>#include <fstream>#include <cstring>int main(int argc, char* argv[]){unsigned char* binary_buf = new unsigned char[1024]();memset(binary_buf, 1, 1024);std::ofstream file("output.binary", std::ios::out | std::ios::binary);file.write(reinterpret_cast<char*>(binary_buf), 1024);// 关闭文件file.close();delete[] binary_buf;binary_buf = NULL;return 0;}

5. 缓冲区指针重定向

#include <iostream>#include <fstream>#include <cstring>int main(int argc, char* argv[]){std::ofstream file("output.txt");file << "123" << std::endl;/** 保存原来的cout缓冲区指针 */std::streambuf* orig_cout_streambuf = std::cout.rdbuf();/** 将cout的缓冲区指针设置为文件流的缓冲区指针 */std::cout.rdbuf(file.rdbuf());/** 现在,使用cout输出的任何内容都会写入"output.txt"文件(并不会再输出至终端上) */std::cout << "This will be written to the file instead of the console." << std::endl;/** 恢复cout原来的缓冲区指针,使输出重回控制台 */std::cout.rdbuf(orig_cout_streambuf);// 关闭文件file.close();return 0;}

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

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

相关文章

559: 字符串排序(python)

收藏 难度&#xff1a;一般 标签&#xff1a;暂无标签 题目描述 在对字符串的排序中&#xff0c;往往具有不同的规则来判断字符串的大小先后。这里有两种比较常见的规则&#xff1a; 1&#xff0e; 首先按字符串长度进行排序&#xff0c;对长度相同的字符串&#xff0c;按字…

力扣热门算法题 56. 合并区间,57. 插入区间,58. 最后一个单词的长度v

56. 合并区间&#xff0c;57. 插入区间&#xff0c;58. 最后一个单词的长度&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.20 可通过leetcode所有测试用例。 目录 56. 合并区间 解题思路 完整代码 Python Java ​编辑 5…

MCU技术的创新浪潮与产业变革

MCU技术的创新浪潮与产业变革 一、MCU技术的创新发展 MCU&#xff0c;即微控制器&#xff0c;作为现代电子设备的核心部件&#xff0c;一直在不断地创新与发展。随着科技的进步&#xff0c;MCU的性能得到了极大的提升&#xff0c;功能也越来越丰富。从8位到32位&#xff0c;再…

G1和ZGC垃圾回收器学习

前言 ​ 随着JDK17的占有率不断升高和SpringBoot3最低支持JDk17&#xff0c;JDK17很大概率会成为大家后续升级的一个选择&#xff0c;而JDK17上最重要的垃圾回收器G1和ZGC&#xff0c;也就显得格外重要。大家提前了解或者学习一下肯定是有用的。 ​ 本篇文章也默认大家了解一…

C语言学习笔记

基础语法 注释 int main() {//这是单行注释 /** 多行注释*/ }变量 变量声明 格式&#xff1a;type name int main() {//变量的声明int num;//变量使用num1;//声明多个变量int num1,num2;//变量的初始化int num31;} int num&#xff1b; num10&#xff1b; 常量 const dou…

单片机学到什么程度才可以去工作?

单片机学到什么程度才可以去工作? 如果没有名校或学位的加持&#xff0c;你还得再努力一把&#xff0c;才能从激烈的竞争中胜出。以下这些技能可以给你加分&#xff0c;你看情况学&#xff0c;不同行业对这些组件会有取舍: . Cortex-M内核:理解MCU内核各部件的工作机制&#…

力扣---两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

AI程序员:编程界的新贵还是险象环生?

全球首位AI程序员诞生&#xff0c;将会对程序员的影响有多大&#xff1f; 最近&#xff0c;全球的编程界掀起了一场轩然大波&#xff0c;因为一位名为Devin的AI程序员闪亮登场。他的出现让人不禁思考一个有趣而深刻的问题&#xff1a;AI程序员会不会抢走人类程序员的饭碗呢&am…

快速画流程图

使用在线工具&#xff1a;PlantUML PlantUML 官网:https://plantuml.com/ 中文官网:https://plantuml.com/zh/ 使用步骤如下&#xff1a; 1、拷贝一个完成函数&#xff1a; int func_init(const char *tag) {if (tag ! NULL) {printf("set TAG :%s", tag);}print…

webpack5零基础入门-13生产模式

1.生产模式介绍 生产模式是开发完成代码后&#xff0c;我们需要得到代码将来部署上线。 这个模式下我们主要对代码进行优化&#xff0c;让其运行性能更好。 优化主要从两个角度出发: 优化代码运行性能优化代码打包速度 2.生产模式准备 我们分别准备两个配置文件来放不同的…

xml转json

安装包 <dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.15.3</version></dependency>使用 类定义 Data JacksonXmlRootElement(localName &…

python的FastAPI 快速入门

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

《算法王晓东》多处最优服务次序问题

多处最优服务次序问题 题目描述 设有n个顾客同时等待一项服务。顾客i需要的服务时间为ti, 1≤i≤n。共有s处可以提供此项服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小? 平均等待时间是n个顾客等待服务时间的总和除以n。 算法设计&#xff1a;对于给定的n个顾…

41 物体检测和目标检测数据集【李沐动手学深度学习v2课程笔记】

目录 1. 物体检测 2. 边缘框实现 3.数据集 4. 小结 1. 物体检测 2. 边缘框实现 %matplotlib inline import torch from d2l import torch as d2ld2l.set_figsize() img d2l.plt.imread(../img/catdog.jpg) d2l.plt.imshow(img);#save def box_corner_to_center(boxes):&q…

CY7C144

关于CY7C144和CY7C145这两款双端口静态随机存取存储器&#xff08;Dual-Port SRAM&#xff09;的数据手册&#xff0c;由Cypress Semiconductor公司生产。以下是文档的翻译内容和详细解读&#xff1a; 特性 真正的双端口存储单元&#xff0c;允许同时读取同一内存位置CY7C144…

javascript的词法结构

js的标识符也就是名字&#xff0c; 必须以 字母、下划线、或$符号开头 unicode js程序是使用Unicode字符集编写的&#xff0c; 建议只使用ASCII字母和数字&#xff0c;但是语言本身也支持使用Unicode字母 数字和象形文字 不支持标签符号 关于Unicode转义序列 由于假数据硬件和…

设计模式之抽象工厂模式解析

抽象工厂模式 1&#xff09;问题 工厂方法模式中的每个工厂只生产一类产品&#xff0c;会导致系统中存在大量的工厂类&#xff0c;增加系统的开销。 2&#xff09;概述 a&#xff09;产品族 和 产品等级结构 产品等级结构&#xff1a;产品的继承结构&#xff1b; 产品族&…

通俗理解自注意力机制

自注意力机制&#xff08;Self-Attention Mechanism&#xff09; 是一种用于处理序列数据的机制&#xff0c;最初被引入到神经网络模型中&#xff0c;用于在序列数据中建立全局依赖关系。自注意力机制最常用于自然语言处理和计算机视觉领域&#xff0c;特别是在Transformer模型…

Python实战:Pandas数据合并与重塑

本文将深入探讨Pandas库在数据合并与重塑方面的强大功能。我们将涵盖多种数据合并方法&#xff0c;如merge、join、concat等&#xff0c;以及数据重塑的技巧&#xff0c;如pivot_table、merge_asof等。 一、引言 Pandas是一个强大的Python数据分析库&#xff0c;它提供了丰富…

【Flutter】文件选择器(file_picker)的用法

Flutter 没有提供内置的文件选择器&#xff0c;但社区内有人贡献了一个比较完整的解决方案——file_picker。 file_picker 的 API 简洁易用&#xff0c;支持全平台&#xff08;Android / iOS / Mac / Linux / Windows&#xff09;&#xff0c;是我开发桌面应用时的首选。 这边…