17.4 文件输入和输出

17.4.1 简单的文件I/O

需要在头文件中#include<fstream>

  • 写入文件
  1. 创建一个ofstream对象管理输出流,每个对象建立一个输出缓冲区,分配相应空间
  2. 关联该对象和输出文件。如果文件没有创建,则自动创建该文件;如果已创建,则该文件中内容会被清空(后面会介绍接着写)
  3. 利用cout的方式将内容写入文件,写入终止时,关联自动关闭,也可以用file.close()手动关闭;关闭文件后缓冲区将会刷新,确保缓冲区的内容写入已写入文件
#include<fstream>
#include<string>std::string txt_path = "path/to/your/txt/file.txt";
// 第一种关联方式
ofstream file_out(txt_path);  // 创建了一个file_out对象// 第二种关联方式
ofstream file_out;
file_out.open(txt_path);//写入文件
file_out << "the content in file.txt \n ";// 手动关闭
file_out.close();
  • 读取文件
  1. 创建一个ifstream对象管理输入流,每个对象建立一个输入缓冲区,分配相应空间
  2. 关联该对象和输入文件
  3. 利用cin的方式将内容写入文件,读取终止时,关联自动关闭,也可以用file.close()手动关闭
#include<fstream>
#include<string>std::string txt_path = "path/to/your/txt/file.txt";
// 第一种关联方式
ifstream file_in(txt_path);  // 创建了一个file_out对象// 第二种关联方式
ifstream file_in;
file_in.open(txt_path);//读取文件的一个字符
char ch;
file_in  >> ch;// 读取文件的前80个字符
char buf[80];
file_in >> buf;// 读取文件的一行
file_in.getline(buf, 80);   // 超过则保存该行的前80个std::string one_line;
getline(file_in, one_line);// 手动关闭
file_in.close();

17.4.1 流状态检查和is_open()

C++文件流类从ios_base类继承了一个流状态成员,该成员存储了流状态信息:一切顺利(0)、已到达文件末尾(1)、I/O操作失败(1)等。可以通过判断流状态信息来判断文件是否存在、是否成功打开、是否读取完毕等

  • 判断文件是否成功打开

    // 一种判断方式,打开失败则进入if
    if(file_in.fail()) {...
    }// 或者
    if(!file_in) {...
    }// 或者用一种较新的C++方法,老式C++可能不支持;打开失败则进入if
    if(!file_in.is_open()) {...
    }
    

「C++」C++ Primer Plus 笔记:第十七章 输入、输出和文件相关推荐

  1. 「C++」C++ Primer Plus 笔记:第二章 开始学习C++

    2.1 进入C++ 注释以//打头 想要执行程序后保持窗口打开(有的情况下执行完后窗口会自动关闭)可以在return前加上cin.get() 2.1.1 main()函数 函数结构为:函数返回类型 函 ...

  2. 「C++」C++ Primer Plus 笔记:第一章 预备知识

    第一章 预备知识 1.1 C++ 简介 1.2 C++ 简史 OOP:面向对象编程 1.2.1 C语言 编译器:将高级语言翻译成特定计算机的内部语言(底层语言),使用同一高级语言的不同平台编译器可以使 ...

  3. 「C++」C++ Primer Plus 笔记:第三章 处理数据

    面向对象编程的本质是设计并扩展自己的数据类型. C++内置的数据类型分为两组:基本类型和复合类型.基本类型包括整数和浮点数:复合类型是在基本类型的基础上构建的数组,字符串,指针和结构. 3.1 简单变 ...

  4. C++ Primer 学习笔记 第十七章 标准库特殊设施

    标准库特殊设施 637 初始化tuple #include <iostream> #include <vector> #include <string> #incl ...

  5. 「Docker」Docker教程+学习笔记

    Docker概览 docker是一个开发,运输,承载应用的开源平台.docker能够将一个大型项目的各个模块独立,各模块独立也就意味着传送独立.部署独立.环境独立.测试独立,为开发大型项目提供了极大的 ...

  6. 「Apollo」Cyber RT 学习笔记

    介绍 Cyber RT是一款开源的适用于自动驾驶场景的框架 在x86/ARM64架构的Docker环境中运行CyberRT 利用CyberRT创建一个新组件 CyberRT开发者工具 CyberRT开 ...

  7. 「JupyterNotebook」Jupyter快捷键个人笔记

    在命令模式下按h即可弹出快捷键提示 键盘导航 enter:进入编辑模式,单元格最左边呈绿条 esc:进入命令模式,单元格最左边呈蓝条 命令/编辑模式下: (常用的写前头 Shift-Enter:运行程 ...

  8. C++ Primer 学习笔记 第一,二章

    2021年4月4日,我终于开始学习C++啦,下面的笔记会记录着我的心酸的学习历程,每个标题会记录着下面代码在<C++中文版 Primer>中的页码 P6 实现两数之和 # include ...

  9. c++ primer 5th 笔记:第二章

    第二章:变量和基本类型 笔记: 1. c++语言规定一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大.其中,数据类型long l ...

最新文章

  1. java 随机生成常用汉字_Java随机生成中文汉字
  2. 我在A4纸上看宫崎骏动画
  3. 一文搞懂 Prometheus 的直方图
  4. 电源空间辐射CDN余量低_EMI辐射整改
  5. 121 Best Time to Buy and Sell Stock 买卖股票的最佳时机
  6. 构建之法第四章--两人合作
  7. Scaffold php,GitHub - yiiplus/scaffold: scaffold是一个基于Yii2高级项目模版工程化实现的应用程序...
  8. 学会这10大高性能开发技术,轻松躲过裁员名单!
  9. mysql 视图 字典_MySQL深入01-SQL语言-数据字典-服务器变量-数据操作DML-视图
  10. NVIDIA开源了基于PyTorch的3D深度学习的综合库
  11. php投影,box-shadow实现不同角度的投影
  12. Linux虚拟机添加磁盘
  13. Linux软件包管理之源码包、脚本安装包
  14. bgp协议 怎么知道相邻路由的ip地址_三级网络技术考前选择题1—BGP
  15. 优化CUDA数据传输
  16. 机器学习落地的五个阶段
  17. Nodejs操作Access数据库
  18. ArcMap制作城市道路网壁纸(OSM道路数据下载)
  19. 中国大学MOOC课程《程序设计入门——C语言》 第8周编程练习
  20. 服务器可视化显示空间,云服务器可视化面板

热门文章

  1. bert简介_关于BERT:你不知道的事
  2. 里加一列为1_一素一菩提 @ 素牛排薯泥amp;百香龙珠气泡饮
  3. Uipath 学习栏目基础教学:11、录制
  4. Spring Boot 管理 MVC
  5. JavaScript实现数乘以二multiplyByTwo算法(附完整源码)
  6. boost::reverse_copy相关的测试程序
  7. boost::multiprecision模块测试 cpp_dec_float_50 是否符合我们的 概念要求
  8. 使用 Boost.MPI 的 reduce() 计算最小值的示例
  9. boost::mp11::mp_replace_at相关用法的测试程序
  10. boost::lambda::switch_statement用法的测试程序