C++基础——文件操作

news2024/9/24 19:23:12

文章目录

  • 1 概述
  • 2 文本文件
    • 2.1 写文件
      • 2.1.1 写文件流程
      • 2.1.2 文件打开方式
    • 2.2 读文件
  • 3 二进制文件
    • 3.1 写文件
    • 3.2 读文件

1 概述

程序最基本的操作之一就是文件操作,程序运行时的数据都是临时数据,当程序结束后就不复存在了。通常都是通过文件或其他持久化存储方式存储程序运算完成的数据。
文件类型可分为:

  • 文本文件:文本文件以ascii码存储到计算机中
  • 二进制文件:文件以二进制方式存储在计算机中,难以阅读

操作文件相关的类:

  • ofstream:写操作
  • ifstream:读操作
  • fstream:读写操作

2 文本文件

2.1 写文件

2.1.1 写文件流程

#include <iostream>
#include <fstream>

using namespace std;

int main() {
    ofstream out;
    out.open("./test.txt", ios::out);
    out << "hello world";
    out.close();
    return 0;
}

在这里插入图片描述

如果文件不存在,则会创建一个文件,并写入数据

2.1.2 文件打开方式

对于文件的读写,都需要先打开文件

打开方式解释
ios::in为读文件而打开文件
ios::out为写文件而打开文件
ios::ate初始位置:文件尾
ios::app追加方式写文件
ios::trunc如果文件存在先删除,再创建
ios::binary二进制方式

这些方式可以配合使用,采用或运算符。
比如二进制写入 ios::binary | ios::out

2.2 读文件

#include <iostream>
#include <fstream>

using namespace std;

int main() {
    ifstream in;
    in.open("./test.txt", ios::in);
    if (!in.is_open()) {
        cout << "open file failed" << endl;
        return 0;
    }

    char buff1[1024] = {0};
    while (in >> buff1) {
        cout << buff1 << endl;
    }

    in.clear();
    in.seekg(0, ios::beg);
    char buff2[1024] = {0};
    while(in.getline(buff2, sizeof(buff2))) {
        cout << buff2 << endl;
    }

    in.clear();
    in.seekg(0, ios::beg);
    string buff3;
    while (getline(in, buff3)) {
        cout << buff3 << endl;
    }

    in.clear();
    in.seekg(0, ios::beg);
    char c;
    while ((c = in.get()) != EOF) {
        cout << c;
    }

    in.close();

    return 0;
}

输出

hello
world
hello world
hello world
hello world

读文件操作与写文件操作类似,不过读文件有多种读取方式。
第1种读取到换行、空格等都会结束,所以是两行
后面的三种都能够输出整行。

3 二进制文件

二进制文件存储的是字符编码之后的二进制,可以通过二进制的方式打开文件,进行二进制的读写

3.1 写文件

#include <iostream>
#include <fstream>

using namespace std;

class Person {
public:
    char m_Name[64];
    int m_Age;
};

int main() {
    ofstream out("./test2", ios::out | ios::binary);
    Person p = {"zhangsan", 23};
    out.write((const char *) &p, sizeof(p));
    out.close();
}

也是通过输出流,输出为二进制模式,通过write函数调用来谢二进制数据到文件中
打开文件普通编辑器查看只是一个有很多乱码的文件,使用二进制查看则是16进制表示的二进制数据。

3.2 读文件

#include <iostream>
#include <fstream>

using namespace std;

class Person {
public:
    char m_Name[64];
    int m_Age;
};

int main() {
    ifstream in("./test2", ios::in | ios::binary);
    if (!in.is_open()) {
        cout << "test2 open fail" << endl;
        return -1;
    }
    Person p;
    in.read((char *) &p, sizeof(p));
    cout << "p.m_Name = " << p.m_Name << endl;
    cout << "p.m_Age = " << p.m_Age << endl;
}

读文件使用输入流。通过read函数调用,从文件中读取数据,可以使用对象进行读取,需要写入时按照同样的方式写入。

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

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

相关文章

酷狗音乐app 评论signature

文章目录 声明目标加密参数定位翻页逻辑代码实现 声明 本文章中所有内容仅供学习交流&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请私信我立即删除&#xff01; 目标 复制curl转python # -*- c…

SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解

SQL SELECT INTO 语句 SELECT INTO 语句将数据从一个表复制到一个新表中。 SELECT INTO 语法 将所有列复制到新表中&#xff1a; SELECT * INTO newtable [IN externaldb] FROM oldtable WHERE condition;只复制一些列到新表中&#xff1a; SELECT column1, column2, colu…

MySQL三大日志详细总结(redo log undo log binlog)

MySQL日志 包括事务日志&#xff08;redolog undolog&#xff09;慢查询日志&#xff0c;通用查询日志&#xff0c;二进制日志&#xff08;binlog&#xff09; 最为重要的就是binlog&#xff08;归档日志&#xff09;事务日志redolog&#xff08;重做日志&#xff09;undolog…

数据结构(超详细讲解!!)第二十六节 图(上)

1.基本概念 图&#xff08;Graph&#xff09;是一种较线性表和树更为复杂的非线性结构。是对结点的前趋和后继个数不加限制的数据结构&#xff0c;用来描述元素之间“多对多”的关系(即结点之间的关系是任意的)。 一个图G &#xff08;V&#xff0c;E&#xff09;由顶点&…

从谷歌搜索结果出现 AI 生成的图片谈起:AI的利与弊

随着人工智能&#xff08;AI&#xff09;的不断发展&#xff0c;其应用领域也越来越广泛。谷歌搜索是现代人日常生活中的一个常用工具&#xff0c;经常用于获取各种信息。最近&#xff0c;谷歌搜索结果中甚至出现了由AI生成的图片&#xff0c;这引发了人们对AI技术的讨论。 首…

CentOS7搭建Kubernetes集群

环境准备&#xff1a;配置好静态IP地址的Centos7&#xff08;2核、master内存3GB、slave内存2GB&#xff09;。 搭建概述&#xff1a;先将一台虚拟机搭建为master、随后克隆出两台虚拟机作为从节点。 虚拟机主机名和IP地址&#xff1a; 主机名IP地址master192.168.138.110sl…

vue3高德地图使用,地址搜索,地址逆解析

在vue3项目里使用高德地图 高德地图文档 先在项目的index.html页面里添加一些东西 <script type"text/javascript">window._AMapSecurityConfig {securityJsCode: "xxxxxxxxxxxxx", //高德安全码};</script> <script src"https://…

Ubuntu Server 20.04.6安装Anaconda3

下载安装包 去下面的网页找到自己想要安装的对应版本的链接&#xff1a; https://repo.anaconda.com/archive/ 我安装的版本链接如下&#xff1a; https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh 复制这个链接后使用如下命令下载&#xff1a; wget …

外汇天眼:在QOINTEC投资需缴纳分成费才给出金?这合理么?

一般来说&#xff0c;在正规的平台上申请出金是不需要缴纳什么费用的&#xff0c;除非有一些特殊情况&#xff0c;像低额出金、没有交易就申请出金等情况下&#xff0c;或许会让你缴纳一定的手续费或者隔夜利息费等&#xff08;不同的平台有不同的规则&#xff09;&#xff0c;…

python爬取robomaster论坛数据,作为后端数据

一. 内容简介 python爬取robomaster论坛数据&#xff0c;作为后端数据 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 三.主要流程 3.1 接口分析 # 接口分析 # 全部数据 # https://bbs.robomaster.com/forum.php?modforumdisplay&fid63 2…

LLM 分布式训练框架 | DeepSpeed与Accelerate

&#x1f680; 简单记录下根据网上资料&#xff08;如Reference中所列&#xff09;所学到的一些知识&#xff0c;这里主要介绍的是deepspeed分布式训练框架相关概念。 &#x1f604;小日记&#xff1a;今天太舒服了&#xff0c;早上跑了6km&#xff0c;晚上吃了养生菌菇火锅~ …

分布编译和注释

文章目录 分布编译预处理编译汇编链接 注释单行注释多行注释预处理注释 总结 分布编译 上一节使用 gcc main.c就生成了a.exe的可执行文件&#xff0c;提到了将main.c文件生成a.exe实际上执行了以下四步&#xff1a; 预处理编译汇编链接   每一步都有单独的指令&#xff0c;而…

C++学习之继承中修改成员权限细节

看看下面的代码 这是错误的 class A { public:int x 10; }; class B :public A {using A::x;int x 100; };看看函数 class A { public:void fun(){cout << "uuuu" << endl;} }; class B :public A { public:using A::fun;void fun(){cout << …

每天学习一点点之 MySQL TINYINT

我已经不是第一次遇到关于 TINYINT 的问题了。在 MySQL 中&#xff0c;当我们将某个字段设置为 TINYINT&#xff0c;随着业务的扩展&#xff0c;我们可能会发现 TINYINT 的范围无法满足需求。这时需要修改字段属性。但如果表的数据量很大&#xff0c;或者由于分表导致涉及的表数…

AI虚拟数字人——营销宣传领域的新亮点

AI生活节即将到来&#xff0c;邀请消费者共同探索生活小妙趣&#xff0c;为美好生活注入新的想象。AI一词我们过去可能听的比较多&#xff0c;听到最多的可能就是AI虚拟数字人了。这年头&#xff0c;打造一个AI主播、虚拟数字人已经屡见不鲜了&#xff0c;因为AI数字人拥有强大…

数字孪生3D场景开发工具:弥补不足,开拓全新可能

随着数字化时代的来临&#xff0c;越来越多的企业和行业开始探索数字孪生技术的应用。数字孪生是指通过数字技术将现实世界中的物体、场景等复制到虚拟世界中&#xff0c;以实现实时监测、预测和优化。然而&#xff0c;在数字孪生的发展过程中&#xff0c;一些不足也逐渐浮现。…

AndroidStudio - 新版本 Logcat 使用详解

最近这俩天正好有时间给自己做一下减法&#xff0c;忘记是去年还是今年&#xff0c;在升级 AndroidStudio 后使用 Logcat查看日志的方式也发生了一些变化&#xff0c;虽然一直在使用&#xff0c;但每当看到之前还未关闭 Logcat 命令行工具额昂也&#xff0c;就感觉可能还存在知…

基于springboot的社区团购系统设计

摘 要 本课题是根据用户的需要以及网络的优势建立的一个社区团购系统&#xff0c;来满足用户团购的需求。 本社区团购系统应用Java技术&#xff0c;MYSQL数据库存储数据&#xff0c;基于Spring Boot框架开发。在网站的整个开发过程中&#xff0c;首先对系统进行了需求分析&…

手持机|三防智能手机_4寸/5寸/6寸安卓系统三防手机PDA手持终端方案

随着科技的不断发展&#xff0c;三防手持机作为一种多功能设备&#xff0c;正逐渐在各行业得到广泛应用。这款手持机采用高性能处理器&#xff0c;支持高精度北斗定位和工业本安防爆功能&#xff0c;并具备IP67级防水防尘性能和1.5米防跌落能力。因此&#xff0c;它在仓储管理、…

C语言进阶之笔试题详解(2)

前言 这里的内容包括二维数组笔试题和指针笔试题&#xff0c;供给读者对这部分知识进行加深和巩固。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 前言 笔试题 二维数组 题目…