码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++ 文件IO实现


            目录

    1、文件打开 / 关闭 

    (1) 打开文件

    (2) 关闭文件

    2、二进制读写(read / write)

    (1)  write函数

    (2) read 函数

    3、文本读写

    (1) 写操作

    (2) 读操作


    C语言使用 fread / fwrite 函数来实现二进制读写,使用 fgetc /fputc / fgets / fputs 实现文本/字符串的读写。值得注意的是二进制读写不需要分隔符,文本/字符串的读写需要有分隔符,否则读取的时候会因为找不到分隔符而达不到想要的效果。

    C++也有对应的读写类(ifstream / ofstream)来让我们达到读写文件的目的,二进制读写使用的是 read / write,文本的读写使用的是 流提取(>>) 和 流插入(<<)。

    1、文件打开 / 关闭 

    (1) 打开文件

    C++打开文件的方式并不是通过调用函数的方式,而是调用构造函数的方式来打开文件。

    读形式打开:

    1. // 文本的形式读:
    2. ifstream ifs("文件路径");
    3. // 二进制的形式读:
    4. ifstream ifs("文件路径", ifstream::in | ifstream::binary);

    写形式打开:

    1. // 文本的形式读:
    2. ifstream ofs("文件路径");
    3. // 二进制的形式读:
    4. ofstream ofs("文件路径", ofstream::out|ofstream::binary);

    (2) 关闭文件

    关闭文件的话,可以主动调用 close 函数,也可以在销毁对象时自动调用析构函数。

    2、二进制读写(read / write)

    虽说是二进制读写,即便是普通的文本读写也是支持的,只不过使用流插入/流提取进行文本读写更加方便。这里使用的头文件是 fstream。

    (1)  write函数

    函数声明如下:

    第一个参数:要写入的数据(如果不是char*类型,需要强转成char*类型)

    第二个参数:数据所占字节数

    返回值:返回一个输出流对象的引用(一般不考虑返回值)

    1. ofstream ofs("D:\\data.txt", ofstream::out | ofstream::binary);
    2. const char* str = "hello";
    3. ofs.write(str, sizeof(str));
    4. ofs.close();

     

    (2) read 函数

    函数声明如下:

     第一个参数:数据读取到以后,要存到哪个地址

    第二个参数:可以用于存储的空间所占字节数

    返回值:返回一个输入流对象的引用(一般不考虑返回值)

    1. ifstream ifs("D:\\data.txt", ifstream::in | ifstream::binary);
    2. char* pstr = new char[5];
    3. ifs.read(pstr, sizeof(pstr));

    3、文本读写

    文本的读写可以使用 流插入或者流提取来实现更加方便快捷。首先要创建流的对象,然后使用流插入或者流提取来进行读写。

    (1) 写操作

    1. ofstream ofs("D:\\data.txt");
    2. ofs << "张三" << " " << 18; // 文本形式写入的时候,不同数据需要使用空格或者换行隔开
    3. ofs.close();

    (2) 读操作

    1. ifstream ifs("D:\\data.txt");
    2. char name[10] = { 0 };
    3. int age;
    4. ifs >> name >> age; // 读取的时候,根据分隔符判断一个数据是否读取结束
    5. //然后继续读取下一个,依次存入变量中
    6. ifs.close();
    7. cout << name << " " << age;

    注意:流插入和流提取仅支持内置类型,如果要支持自定义类型,需要重载 流提取和流插入的操作符函数。

    流插入操作符 (<<) 重载 —— 实现自定义类型数据的打印_仲夏夜之梦~的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/challenglistic/article/details/127694872?spm=1001.2014.3001.5501

  • 相关阅读:
    GIS(地理信息系统/地理信息科学)怎么评职称?
    每天新内容
    源码学习之MyBatis的底层查询原理
    Celery结合flask完成异步任务与定时任务
    【wms平台化】一个简单的wms十表架构
    阿里巴巴余军:钉钉宜搭低代码实践之路
    Elasticsearch的ON Error和ONOutOfMemoryError检查是两个与JVM(Java虚拟机)错误处理相关的引导检查
    vue3 + vue-router + keep-alive缓存页面
    打开常用软件出现msvcp140.dll丢失的解决方法,msvcp140.dll是什么东西?
    【MATLAB源码-第58期】基于蛇优化算法(SO)和粒子群优化算法(PSO)的栅格地图路径规划最短路径和适应度曲线对比。
  • 原文地址:https://blog.csdn.net/challenglistic/article/details/127658703
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号