C++的文件操作

news/2024/5/19 20:25:58/文章来源:https://blog.csdn.net/ThePaK/article/details/133222408

文件操作

程序运行时产生的数据都属于临时数据,通过文件可将数据持久化

C++中对文件操作需要包含头文件<fstream>

文件类型分为两种:

  1. 文本文件 - 文件以文本的ASCII码形式存储在计算机中
  2. 二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们

操作文件的三大类:

  1. ofstream: 写操作
  2. ifstream: 读操作
  3. fstream: 读写操作
文本文件
写文件

步骤:

  1. 包含头文件

#include<fstream>

  1. 创建流对象

ofstream ofs;

  1. 打开文件

ofs.open("文件路径", 打开方式);

  1. 写数据

ofs<<"写入数据";

  1. 关闭文件

ofs.close();

文件打开方式

注意:文件打开方式可以配合使用,利用 | 操作符

例如:用二进制方式写文件 ios:: binary | ios:: out

void test01()
{ofstream ofs;ofs.open("test.txt", ios::out);ofs << "名字:" << "哈哈" << endl;ofs << "性别:" << "男" << endl;ofs << "年龄:" << "18" << endl;
}

读文件

读文件步骤如下:

  1. 包含头文件

#include<fstream>

  1. 创建流对象

ifstream ifs;

  1. 打开文件并判断文件是否打开成功

ifs.open("文件路径", 打开文件);

  1. 读数据

四种方式读取

  1. 关闭文件

ifs.close();

读文件可以利用ifstream,或者fstream类

利用is_open函数可以判断文件是否打开成功

close关闭文件

注意:读数据方式3中getline(ifs, buf)需要引用头文件#include<string>

void test02()
{ifstream ifs;//打开文件ifs.open("test.txt", ios::in);//判断文件是否打开成功if (!ifs.is_open()){cout << "读取文件失败!" << endl;return;}//读数据//方式1/*char buf[1024] = { 0 };while (ifs >> buf){cout << buf << endl;}*///方式2/*char buf[1024] = { 0 };while (ifs.getline(buf, 1024)){cout << buf << endl;}*///方式3string buf;while (getline(ifs, buf)){cout << buf << endl;}//方式4char c;while ((c = ifs.get()) != EOF) //end of file{cout << c;}//关闭文件ifs.close();
}
二进制文件
写文件

二进制写文件主要利用流对象调用成员函数write

函数原型:ostream& write(const char* buffer, int len);

参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数

class Person
{
public:char m_Name[64];int m_Age;
};void test01()
{//打开文件方式1/*ofstream ofs;ofs.open("person.txt", ios::out | ios::binary);*///打开文件方式2ofstream ofs("person.txt", ios::out | ios::binary);//写文件Person p = { "张三", 18 };ofs.write((const char*)&p, sizeof(Person));//关闭文件ofs.close();
}
读文件

二进制方式读文件主要利用流对象调用成员函数read

函数原型:istream& read(char *buffer, int len);

参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数

class Person
{
public:char m_Name[64];int m_Age;
};
void test02()
{ifstream ifs;ifs.open("person.txt", ios::in | ios::binary);if (!ifs.is_open()){cout << "打开文件失败!" << endl;return;}Person p;ifs.read((char*)&p, sizeof(Person));cout << "姓名:" << p.m_Name << ", 年龄:" << p.m_Age << endl;ifs.close();
}

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

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

相关文章

6.2 构建并评价聚类模型

6.2 构建并评价聚类模型 6.2.1 使用sklearn估计器构建聚类模型1、聚类的概念2、常见聚类方法3、使用sklearn估计器构建聚类模型4、sklearn估计器代码&#xff1a;构建K-Means聚类模型 6.2.2 评价聚类模型1、FMI评价法2、轮廓系数评价法3、Calinski-Harabasz指数评价法 6.2.1 使…

2023-09-23 Windows系统rust开发环境配置真经

Windows系统rust开发环境配置真经 前言一、配置C编译链和VsCode二、安装rust编译工具三、配置VsCode一. 安装rust-analyzer插件二. 安装Error Lens插件三. 安装Even Better TOML插件四. 配置 launch.json五. 配置 tasks.json六. 配置 Cargo.toml 总结 前言 有了配置C语言环境的…

简单好用的Python装饰器详解

装饰器&#xff08;Decorators&#xff09;是Python中一种强大而灵活的功能&#xff0c;用于修改或增强函数或类的行为。装饰器本质上是一个函数&#xff0c;它接受另一个函数或类作为参数&#xff0c;并返回一个新的函数或类。它们通常用于在不修改原始代码的情况下添加额外的…

【Android Framework系列】第15章 Fragment+ViewPager与Viewpager2相关原理

1 前言 上一章节【Android Framework系列】第14章 Fragment核心原理(AndroidX版本&#xff09;我们学习了Fragment的核心原理&#xff0c;本章节学习常用的FragmentViewPager以及FragmentViewPager2的相关使用和一些基本的源码分析。 2 FragmentViewPager 我们常用的两个Page…

分享78个Python源代码总有一个是你想要的

分享78个Python源代码总有一个是你想要的 源码下载链接&#xff1a;https://pan.baidu.com/s/1ZhXDsVuYsZpOUQIUjHU2ww?pwd8888 提取码&#xff1a;8888 下面是文件的名字。 12个python项目源码 Apache Superset数据探查与可视化平台v2.0.1 API Star工具箱v0.7.2 Archery…

刷刷刷——滑动窗口

文章目录 209. 长度最小的子数组&#xff08;中等&#xff09;题目链接算法原理代码实现 3. 无重复字符的最长子串&#xff08;中等&#xff09;题目链接算法原理代码实现 1004. 最大连续1的个数 III&#xff08;中等&#xff09;题目链接算法原理代码实现 1658. 将 x 减到 0 的…

[矩阵的乘法运算] m*M = c

另人给的一道题&#xff0c;一时没弄出来&#xff0c;后来看WP&#xff0c;复现一下。 对于矩阵运算 m*M c 求m 的情况。 满秩差1半秩 import os import secret import hashlib from Crypto.Util.number import getPrime from Crypto.Util.Padding import padLEN 32def xo…

Denoising diffusion implicit models 阅读笔记

Denoising diffusion probabilistic models (DDPMs)从马尔科夫链中采样生成样本&#xff0c;需要迭代多次&#xff0c;速度较慢。Denoising diffusion implicit models (DDIMs)的提出是为了加速采样过程&#xff0c;减少迭代的次数&#xff0c;并且要求DDIM可以复用DDPM训练的网…

【AI视野·今日CV 计算机视觉论文速览 第252期】Fri, 22 Sep 2023

AI视野今日CS.CV 计算机视觉论文速览 Fri, 22 Sep 2023 Totally 90 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;SVGCustomization, 基于文本的矢量图生成定制(from 香港城市大学)。 website:https://intchous.github.io/SVGCustomization/ …

基于SpringBoot的社区医院信息平台

目录 前言 一、技术栈 二、系统功能介绍 患者信息管理 护士信息管理 医生信息管理 药品管理员管理 患者添加 安排检查 完成注射列表 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系…

【一、虚拟机vmware安装】

安装虚拟机 下载 官方下载地址&#xff1a;https://www.vmware.com/cn.html 大概流程就是&#xff0c;最重要的事最后一步

问题:conda删除虚拟环境,报错no package names supplied

用conda 用 conda remove -n ScratchDet_20200114 删除虚拟 环境ScratchDet_20200114时报错 conda remove -n ScratchDet_20200114CondaValueError: no package names supplied,try "conda remove -h" for more details 解决方法&#xff0c;用下面的命令 conda env…

什么是CORS(跨源资源共享)?如何解决前端中的CORS问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CORS&#xff08;跨源资源共享&#xff09;⭐ 解决前端中的CORS问题的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为…

LeetCode【174. 地下城游戏】

一片丹心图报国&#xff0c;两行清泪为忠家。——于谦 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康…

Python进阶学习----一闭三器

目录 ​编辑 前言 一.三器 1. 迭代器&#xff08;Iterator&#xff09; 1.1 什么是可迭代对象 1.2什么是迭代器 1.3案例演示&#xff1a; 以下是一个简单的迭代器示例&#xff0c;遍历一个列表并打印每个元素&#xff1a; 1.4迭代器总结 2. 生成器&#xff08;Generat…

前端uniapp如何转base64使用uniapp插件市场

插件市场 网址 使用 可以下载&#xff0c;也可以引用&#xff0c;我是下载下来的引用 代码 正常使用 pathToBase64(img).then(path > {img pathresolve(path)}).catch(error > {console.error(error)reject(error)})使用出现[object Promise]错误 解决方法 let img …

算法通关村第16关【青铜】| 滑动窗口思想

1. 滑动窗口的基本思想 一句话概括就是两个快慢指针维护的一个会移动的区间 固定大小窗口&#xff1a;求哪个窗口元素最大、最小、平均值、和最大、和最小 可变大小窗口&#xff1a;求一个序列里最大、最小窗口是什么 2. 两个入门题 &#xff08;1&#xff09;子数组最大平…

Docker部署Nginx+FastDFS插件

文章目录 一、部署FastDFS二、部署Nginx(带FastDFS插件)三、FastDFS上传文件Nginx访问验证 一、部署FastDFS 1、准备工作 docker pull qinziteng/fastdfs:5.05 Pwd"/data/software/fastdfs" mkdir ${Pwd}/{storage,tracker} -p2、创建TEST容器&#xff0c;将fastdf…

RK3568平台开发系列讲解(工具命令篇)ADB的安装

🚀返回专栏总目录 文章目录 一、ADB介绍二、Windows 下安装 adb 工具沉淀、分享、成长,让自己和他人都能有所收获!😄 一、ADB介绍 adb 全称 Android Debug Bridge,直译过来就是 Android 调试桥,它是一个通用的命令行工具。adb 做为 Android 设备与 PC 端连接的一个桥梁…

linux c++调用c

参考 【Linux下gcc编译的四个过程】_Deacde_ZY的博客-CSDN博客 C与C如何互相调用_c文件引用c头文件_卍一十二画卍的博客-CSDN博客 Linux动态链接库的创建与使用_linux创建动态库_满天星羽的博客-CSDN博客 c调用c 1.1 例子1&#xff1a; test1.c #include <stdio.h>…