目录

8.2 文件输入和输出

fstream头文件

fstream特有的操作

输出文件(写入文件)

输入文件(读取文件)

成员函数open和close

流状态检查和is_open()

文件模式

程序实例


8.2 文件输入和输出

fstream头文件

头文件fstream定义了三个类型来支持文件IO:(1)ifstream从一个给定文件读取数据;(2)ofstream向一个给定文件写入数据;(3)fstream可以读写给定文件


fstream特有的操作

fstream特有的操作

fstream fstrm

创建一个未绑定的文件流

fstream fstrm(s)

创建一个fstream,并打开名为s的文件。默认的文件模式mode依赖于fstream的类型

fstream fstrm(s,mode)

与前一个构造函数类似,但按指定mode打开文件

fstrm.open(s)

打开名为s的文件,并将文件与fstrm绑定,默认的文件mode依赖于fstream的类型,返回void

fstrm.close()

关闭与fstrm绑定的文件,返回void

fstrm.is_open()

返回一个bool值,指出与fstrm关联的文件是否成功打开且尚未关闭


输出文件(写入文件)

写入文件的一般步骤:

(1)创建一个ofstream对象流,对象流都会定义一个open成员函数;

(2)将该对象与特定的文件关联起来,即关联一个文件:

(3)以使用cout的方式使用该对象流,唯一区别是输出将进入文件,而不是屏幕;

如下例子创建对象流和关联文件:

第一种方式,创建对象流时就关联文件,open函数会被自动调用:

ofstream out(file);   //自动调用open函数将out对象流和file关联起来

第二种方式,创建空对象流,调用open函数关联文件:

ofstream out;     //创建空对象流out
out.open(file);   //调用open函数关联file文件

小贴士!!!

默认模式打开文件进行输出将自动打开文件的长度截为零,即删除已有内容。 (细节!!


输入文件(读取文件)

读取文件的一般步骤:

(1)创建一个ifstream对象流,对象流都会定义一个open成员函数;

(2)将该对象与特定的文件关联起来,即关联一个文件;

(3)以使用cin的方式使用该对象流;

如下例子创建对象流和关联文件:

第一种方式,创建对象流时就关联文件,open函数会被自动调用(文件名初始化文件流对象):

ifstream in(file);   //自动调用open函数将in对象流和file关联起来

第二种方式,创建空对象流,调用open函数关联文件:

ifstream in;     //创建空对象流in
in.open(file);   //调用open函数关联file文件

成员函数open和close

对象流都有一个open和close成员函数,

open用来打开某个文件,将文件流和文件关联起来

close用来断开对象流和文件的关联。如果一个文件流想要关联另一个文件,则需要先断开已经关联的文件,如:

ifstream in;     //创建空对象流in
in.open(file);   //调用open函数关联file文件
in.close();      // 关闭文件
in.open(ifile+"2")  // 打开另一个文件

流状态检查和is_open()

打开文件时,对open状态是否成功检查是一个好习惯,有时候可能调用open失败,较新的c++检查文件是否被打开的方法——is_open()方法

以前检查文件是否被成功打开的方式(尽量用is_open):

(1)if(in.fail())...

(2)if(!in.good())...

(3)if(!in)...


文件模式

每个流都有一个关联的文件模式,用来指出如何使用文件,下表列出了文件模式及其含义:

文件模式

in

读方式打开

out

写方式打开

app

每次写操作前均定位到文件末尾

ate

打开文件后立即定位到文件末尾

trunc

截断文件

binary

二进制方式进行IO

打开模式示意图

程序实例

下边是实现一个程序,完成输入和输出操作,程序主要功能:

(1)首先显示文件当前内容(如果有的话)

(2)程序以app模式打开,进行写操作

(3)程序进行读操作,显示文件内容

# include<iostream>
# include<fstream>
# include<string>
using namespace std;int main()
{//读取初始文件内容,并输出显示ifstream in;in.open("guest.txt");char ch;if (in.is_open()){cout << "Here are the current contents of thepeople.text's file:" <<endl;while (in.get(ch))cout << ch;cout << endl;in.close();}// 添加内容到文件ofstream out;out.open("D:guest.txt", ofstream::app);  //out.open("people.txt", ios_base::app);if (!out.is_open()){cout << "failed to open file" << endl;}cout << "Please enter content:";string str;while (getline(cin, str) && str.size() > 0){out << "\n"<<str << endl;}out.close();//读取修改后的文件内容,并输出显示in.open("guest.txt");if (in.is_open()){cout << "Here are the revised contents of the people.text's file:" << endl;while (in.get(ch))cout << ch;cout << endl;in.close();}return 0;}

第一次运行,因为不存在guest.txt文件,所以读取失败,直接进行写操作和输出操作

第二次运行,文件已经存在,则进行读-写-读操作

C++ Primer 第五版 第8章类 8.2——文件输入和输出相关推荐

  1. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案

    理论讲解请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数) 目录 7.1 定义抽象数据类型习题答案 7.4&7.5 7.6&7.7 7. ...

  2. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)

    习题答案请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数)习题答案 目录 7.1 类讲解(成员函数.非成员函数.构造函数) 成员函数 this cons ...

  3. C++ Primer(第五版)第七章 类 部分答案

    第七章 类 练习7.2 练习7.3 练习7.4 练习7.6 练习7.7 练习7.9 练习7.14.7.15.7.22 练习7.23.7.24.7.26 练习7.27 练习7.2 曾在 2.6.2 节的 ...

  4. C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)

    C++Primer(第五版)第6章函数的阅读笔记及课后习题答案总结,课后习题答案是自己学习写出来的,如果有误,欢迎指正 还不完整,后续会更新添加 阅读笔记 C++ Primer 第五版 第6章 6.1 ...

  5. C++ Primer 第五版 第6章 6.7——函数指针习题答案

    理论请参考:C++ Primer 第五版 第6章 6.7--函数指针阅读笔记 目录 6.7 函数指针习题答案 6.54 6.55 6.56 6.7 函数指针习题答案 6.54 vector是指向该函数 ...

  6. C++ Primer 第五版 第6章 6.7——函数指针阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.7--函数指针习题答案 目录 6.7 函数指针 使用函数指针 返回指向函数的指针 6.7 函数指针 声明一个函数指针,只需要用指针替代函数名即 ...

  7. C++ Primer 第五版 第6章 6.3——函数返回类型和return语句阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.3--函数返回类型和return语句习题答案 目录 6.3 返回类型和return语句 6.3.1 无返回值函数 无返回值函数的特性 6.3. ...

  8. C++ Primer 第五版 第6章 6.3——函数返回类型和return语句习题答案

    理论讲解请参考:C++ Primer 第五版 第6章 6.3--函数返回类型和return语句阅读笔记 目录 6.31 6.32 6.33 6.34 6.35 6.36 6.38 6.31 返回引用无 ...

  9. C++ Primer 第五版 第6章 6.2——函数参数传递习题答案

    理论讲解请参考:C++ Primer 第五版 第6章 6.2--函数参数传递阅读笔记 目录 6.10 指针形参交换两个数 6.12 引用形参交换两个数 6.13 6.14 6.15 6.16 6.17 ...

最新文章

  1. POJ - 1986 Distance Queries 倍增求LCA
  2. 状态机在计算机中的应用
  3. numpy 中的 random.rand() 函数
  4. 在虚拟机上安装Docker并运行Nginx
  5. 脑与认知科学1 脑的基本结构下
  6. 在vue-cli中搭建mock服务器
  7. 枚举操作的常用方法,包括获得枚举的value,name,description
  8. Jfinal源码解析系列一
  9. php检测表大小,查询mysql数据库、表的大小
  10. 虚拟机安装docker_Docker 从入门到放弃:新手学习笔记(上)
  11. 潘石屹没跑,他去学 Python 了
  12. python爬虫练习2:取道指成分股数据
  13. @click.prevent.native作用
  14. 原来微信还有隐藏代码,80%的用户还不知道!(附表白代码)
  15. 测试按键延迟软件,怎么测试键盘延迟-灵猫键盘DIY大师测试键盘响应速度的方法 - 河东软件园...
  16. 那个找不到工作的iOS程序猿
  17. 用Python写个开心消消乐小游戏!自己写的游戏就是好玩!
  18. python实现牛顿法_牛顿法和最速下降法的Python实现
  19. 百科知识 ass文件如何打开
  20. 关于 android 虚拟机显示在了界面里面,怎么把模拟器放到到android studio窗口外面这件事

热门文章

  1. java web 生命周期_JavaWeb的生命周期
  2. mysql 批量建表_mysql 如何实现循环批量插入?
  3. 【windows】windows 11 安装解决 这台电脑无法运行 Windows 11
  4. mysql面试关联查询语句_sql语句多表联查语句的练习(面试题)
  5. aix系统下oracle之ora-00471,Oracle RAC 9.2.0.7 (AIX53,HA52)三台主机实例全down的问题
  6. java 强制走catch_java – IDE强制使用try / catch包围但不抛出异常
  7. java 线程同步的list_java线程生产者与消费者实例(使用List实现同步)
  8. VS CODE Python开发环境配置
  9. 解题:HNOI 2008 玩具装箱
  10. uboot——之初体验