当前位置: 首页 > news >正文

C++——文件操作

一、文本文件

C++中输入输出是通过流对象进行操作,对于文件来说写文件就是将内容从程序输出到文件,需要用到写文件流ofstream;而读文件就是将内容从文件输入到程序,需要用到读文件流ifstream;这两个文件流类都包含在头文件<fstream>中,对文件操作需要包含<fstream>。

(一)写文件

文本文件写入主要包括以下步骤:

  1. 包含头文件:#include<fstream>
  2. 创建文件流对象: ofstream ofs;
  3. 以写入方式打开文件:ofs.open("文件路径",ios::out);
  4. 写入内容:ofs<<"写入内容";
  5. 关闭文件:ofs.close();
#include<iostream>
#include<fstream>
using namespace std;int main(int argc, char const *argv[]) {ofstream ofs;ofs.open("test.txt", ios::out);ofs << "姓名:张三" << endl;ofs << "年龄:20" << endl;ofs.close();return 0;
}

(二)打开方式

打开方式描述
ios::in读取方式打开文件。若文件不存在打开失败
ios::out写入方式打开文件。若文件存在,清空后写入;文件不存在,创建后写入
ios::ate初始位置:文件末尾。单独使用或和ios::out合用没有区别:清空后写入或创建后写入;和ios::in合用,若文件存在末尾可写入,若文件不存在打开失败
ios::app末尾追加。单独使用或和ios::out/in合用没有区别:文件不存在时创建写入,存在时末尾追加;
ios::trunc若文件存在,清空后写入;若文件不存在创建后写入
ios::binary以二进制方式写入或读取文件

(三)读取文件

  1. 文本文件读取主要包含以下步骤:
  2. 包含头文件:#include<fstream>
  3. 创建流对象:ifstream ifs;
  4. 以读取模式打开文件:ifs.open("文件路径+文件名/文件名",ios::in)
  5. 读取数据:常用的有4中方法。
  •         ifs>> int,char,float,char *,string 等等。可读取整形、浮点型、字符型、字符串等等,读取字符串时可将读取内容存入字符数组,也可存入string;读取字符串时一次读一行,遇到空格、制表符、换行符或读取到字符数组长度-1个字符时返回。读取成功返回istream&,读取失败返回false。
  •         ifs.getline(char *buf,int size,char delim='\n');一次读取一行,存入字符数组;遇到换行符或者读取到sizeof(buf)-1个字符返回(最后一个字符需要自动添加结束字符\0);遇到限定字符delim提前返回。读取失败返回false。
  •         getline(istream& ifs,string& str,char delim='\n');一次读取一行,存入字符串;遇到换行符和限定字符delim提前返回。读取失败返回false。
  •         int get();/ istream& get(char *buf, int size,char delim='\n');/istream& get(char c)常用的ifstream成员get函数有这几种重载;同样读取内容存入字符数组时遇到限定字符delim时提前返回,后面两种读取失败返回false。
    #include<iostream>
    #include<fstream>
    using namespace std;
    #include<string>
    //写文件
    void write() {ofstream ofs("test.txt", ios::out);if (ofs.is_open()) {ofs << "姓名:张三" << endl;ofs << "年龄:20" << endl;ofs.close();}
    }
    //方法1
    void func(ifstream& ifs, char buf1[1024], string buf2) {//while (ifs >> buf1) {//	cout << buf1 << endl;//}while (ifs >> buf2) {cout << buf2 << endl;}
    }
    //方法2
    void func(ifstream& ifs, char buf1[1024]) {while (ifs.getline(buf1, 1024)){cout << buf1 << endl;}
    }
    //方法3
    void func(ifstream& ifs, string& buf2) {while (getline(ifs, buf2)) {cout << buf2 << endl;}
    }
    //方法4
    void func(ifstream& ifs, char c) {while (ifs.get(c)) {cout << c;}
    }
    void doWork(char buf1[1024], string& buf2, char c ) {ifstream ifs("test.txt", ios::in);if (ifs.is_open()) {if (c == 1) {func(ifs, buf1, buf2);}else if (c == 2) {func(ifs, buf1);}else if (c == 3) {func(ifs, buf2);}else if (c == 4) {func(ifs, c);}ifs.close();}
    }
    int main(int argc, char const *argv[]) {char buf1[1024];string buf2;char c;write();doWork(buf1, buf2, 1);doWork(buf1, buf2, 2);doWork(buf1, buf2, 3);doWork(buf1, buf2, 4);return 0;
    }

二、二进制文件

(一)二进制文件写入

具体步骤:

  1. 包含头文件:#include<fstream>
  2. 创建文件流:ofstream ofs;
  3. 以二进制方式打开文件:ofs.open("文件名",ios::binary|ios::out);
  4. 写入数据:调用成员函数ostream& write(const char * buffer,int len);                                          ofs.write((const char*)ptr,sizeof(*ptr));         字符指针buffer指向内存中一段储存空间,len是要写入字节数。
  5. 关闭文件:ofs.close();

(二)二进制文件读取

具体步骤:

  1. 包含头文件:#include<fstream>
  2. 创建文件流:ifstream ifs;
  3. 以二进制方式打开文件:ifs.open("文件名",ios::binary|ios::in);
  4. 读取数据:调用成员函数ifstream& read((char*)buf,sizeof(buf));    buf是读取内容的缓存区强转为(char*),按照单个字节计算读取内容。
  5. 关闭文件:ifs.close();
#include<iostream>
using namespace std;
#include<fstream>
#include<string>
class Person {
public:string m_Name;int m_Age;
};
void write(void) {Person p = { "李四",21 };ofstream ofs("test.dat", ios::binary | ios::out);if (ofs.is_open()) {ofs.write((char*)&p, sizeof(p));ofs.close();}
}
void read(void) {Person p;ifstream ifs("test.dat", ios::binary | ios::in);if (ifs.is_open()) {ifs.read((char*)&p, sizeof(p));ifs.close();}cout << "姓名:" << p.m_Name << endl;cout << "年龄:" << p.m_Age << endl;
}
void test(void) {write();read();
}
int main(int argc, char const** argv) {test();return 0;
}

相关文章:

C++——文件操作

一、文本文件 C中输入输出是通过流对象进行操作&#xff0c;对于文件来说写文件就是将内容从程序输出到文件&#xff0c;需要用到写文件流ofstream&#xff1b;而读文件就是将内容从文件输入到程序&#xff0c;需要用到读文件流ifstream&#xff1b;这两个文件流类都包含在头文…...

channel通道笔记

channel通道笔记 介绍 语法 1.一般使用make创建channel(常用) c : make(chan datatype),datatype是数据类型 2.直接显示声明,创建的值为空,一般没有太大意义 var c chan datatype 三种定义写法: 既可以收数据又可以发数据:chan datatype只可以收数据:chan <- datatype只可…...

无涯教程-Lua - 面向对象

面向对象编程(OOP)是现代编程时代中使用最广泛的编程技术之一。 OOP的特征 类(Class) - 类是用于创建对象的可扩展模板。 对象(Objects) - 它是类的实例&#xff0c;并为其分配了单独的内存空间。 继承(Inheritance) - 这是一个概…...

Java中的IOUtils是什么?

Java中的IOUtils是一个工具类&#xff0c;用于简化文件和流的操作。它提供了一些常用的方法&#xff0c;如复制文件、读取文件、写入文件等。 下面是一个简单的示例&#xff0c;演示如何使用IOUtils来复制文件&#xff1a; import org.apache.commons.io.FileUtils; import j…...

电源板(220V转3.3V)调试问题总

目录 现象&#xff1a; 问题可能的影响&#xff1a; 排查过程&#xff1a; 1.测试EC3&#xff0c;C2都在6V左右&#xff0c; 2.怀疑变压器的问题。 2.怀疑原边反馈控制芯片的问题。 3.怀疑后级电路的问题。 现象&#xff1a; 电源板输出3.28V输出正常。 但是测试前级电压…...

【webpack】一些零碎的知识点记录:eslint配置、source-map配置、devServer配置

文章目录 前言eslint安装配置设置规则 devtool设置js.map文件使用模式解释文件说明建议方案 devServer安装配置 前言 有些知识点不知道咋归类&#xff0c;就先暂时放在同一个文章里了。这里只记录配置方式&#xff0c;配置的东西是什么就不过多解释了&#xff0c;因为一般需要…...

VUE之JWT前后端分离认证,学生管理系统

参考资料: SpringBoot搭建教程 SpringCloud搭建教程 JWT视频教程 JWT官网 Vue视频教程 JWT视频参考资料、VUE视频资料,及前后端demo 特别有参考价值的JWT博客1 特别有参考价值的JWT博客2 cookie、localstorage和sessionStorage的区别1 cookie、localstorage和sessi…...

Go学习第五天

Golang中面向对象类的表示与封装 package mainimport "fmt"// 如果类名首字母大写&#xff0c;表示其他包也能够访问 type Hero struct {// 如果类的属性首字母大写&#xff0c;表示该属性是对外能够访问的&#xff0c;否则的话只能够类的内部访问Name stringAd …...

在vue项目中封装WebSockets请求

在Vue项目中封装WebSocket请求包括以下步骤&#xff1a; 1. 安装WebSocket库&#xff1a;首先&#xff0c;导入WebSocket库&#xff0c;例如vue-native-websocket或socket.io-client。根据项目需求选择适当的库&#xff0c;并根据官方文档进行安装和配置。 2. 创建WebSocket服务…...

Linux进程(二)

文章目录 进程&#xff08;二&#xff09;Linux的进程状态R &#xff08;running&#xff09;运行态S &#xff08;sleeping&#xff09;阻塞状态D &#xff08;disk sleep&#xff09;深度睡眠T&#xff08;stopped&#xff09;状态X&#xff08;dead&#xff09;状态Z&#x…...

使用pg_prewarm缓存PostgreSQL数据库表

pg_prewarm pg_prewarm 直接利用系统缓存的代码,对操作系统发出异步prefetch请求&#xff0c;在应用中&#xff0c;尤其在OLAP的情况下&#xff0c;对于大表的分析等等是非常耗费查询的时间的&#xff0c;而即使我们使用select table的方式&#xff0c;这张表也并不可能将所有…...

LeetCode 28题:找出字符串中第一个匹配项的下标

题目 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入&#xff1a;haystac…...

flink+kafka+doris+springboot集成例子

目录 一、例子说明 1.1、概述 1.1、所需环境 1.2、执行流程 二、部署环境 2.1、中间件部署 2.1.1部署kakfa 2.1.1.1 上传解压kafka安装包 2.1.1.2 修改zookeeper.properties 2.1.1.3 修改server.properties 2.1.1.3 启动kafka 2.1.2、部署flink 2.1.2.1 上传解压f…...

ARM裸机-14(S5PV210的时钟系统)

1、时钟系统 1.1、什么是时钟 时钟是同步工作系统的同步节拍 1.2、SoC为什么需要时钟 Soc内部有很多器件&#xff0c;例如CPU、串口、DRAM控制制器、GPIO等内部外设&#xff0c;这些东西要彼此协同工作&#xff0c;需要一个同步的时钟系统来指挥。这个就是我们SoC的时钟系统。…...

Milvus Cloud凭借AI原生,可视化优势荣登全球向量数据库性能排行榜VectorDBBench.com 榜首

在当今的大数据时代,随着人工智能技术的快速发展,向量数据库作为处理大规模数据的关键工具,其性能和效率越来越受到关注。最近,全球向量数据库性能排行榜 VectorDBBench.com 公布了一份最新的评估报告,引人瞩目的是,成立不到一年的新兴公司 Milvus Cloud 凭借其 AI 原生和…...

测试岗?从功能测试进阶自动化测试开发,测试之路不迷茫...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试新人在想什么…...

算法与数据结构(五)--树【1】树与二叉树是什么

一.树的定义 树是一个具有层次结构的集合&#xff0c;是由一个有限集和集合上定义的一种层次结构关系构成的。不同于线性表&#xff0c;树并不是线性的&#xff0c;而是有分支的。 树&#xff08;Tree&#xff09;是n&#xff08;n>0&#xff09;个结点的有限集。 若n0&…...

打开的idea项目maven不生效

方法一&#xff1a;CtrlshiftA&#xff08;或者help---->find action&#xff09;&#xff0c; 输入maven&#xff0c; 点击add maven projects&#xff0c;选择本项目中的pom.xml配置文件&#xff0c;等待加载........ 方法二&#xff1a;view->tools windows->mave…...

kvm+qemu+libvirt管理虚机

virt-manager 图形化创建虚拟机 #virt-manager纳管远程kvm虚拟机 # 可以指定kvm虚机的ssh端口和virt-manager所在主机的私钥 virt-manager -c qemussh://root10.197.115.17:5555/system?keyfileid_rsa --no-fork # 如果你生成的ssh-key 的名称是 test-key,在/home/ssh-key/ 目…...

电气防火限流式保护器在汽车充电桩使用上的作用

【摘要】 随着电动汽车行业的不断发展&#xff0c;电动汽车充电设施的使用会变得越来越频繁和广泛。根据中汽协数据显示&#xff0c;2022年上半年&#xff0c;我国新能源汽车产销分别完成266.1万辆和260万辆,同比均增长1.2倍,市场渗透率达21.6%。因此&#xff0c;电动汽车的安全…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...