【C++复习总结回顾】—— 【九】文件和输入输出流


C++的 I/O是以一连串的字节流的方式进行的,在输入操作中,字节从设备(键盘,磁盘驱动器等)流向内存。在输出操作中,字节从内存流向设备(显示屏,打印机等)

一、关于流的头文件

绝大多数的C++程序都包含了< iostream >头文件,该头文件中声明了所有I/O流操作的所需的基础服务。

< iostream >头文件定义了 cin 标准输入流、cout 标准输出流、cerr 标准错误流 和 clog 有缓冲的标准错误流(流输出内容存入缓冲区,直到缓冲区填满或是被清空才会输出)

< iomanip > 头文件声明了对于带有参数化流运算符(例如 setw 和 setprecision)的格式化I/O有用的服务

<fstream> 头文件声明了用户控制的文件处理服务

二、文件打开模式

三、输出流

输出功能包括

  • 流插入运算符 <<
  • put成员函数进行字符输出
  • write成员函数进行非格式化的输出
  • 十进制、八进制、十六进制格式的整数输出
  • 不同精确度的浮点数的输出
  • 指定宽度数据的输出
  • 。。。。。。

1. 构造输出流对象打开文件——用于修改


默认输出流文件打开模式是 ios::out

当不需要文件时显示的将其关闭,可以减少资源占用 file.close();

举例:使用I/O流以文本方式建立一个文件test.txt,并写入字符!

ofstream file1("E:\\Codes\\TestInfo\\test.txt");
cout << "the file is writing......" << endl;
file1<<"successful input!";
file1.close();
cout<<"done!"<<endl;

2. 文件输出流成员函数

put 成员函数

cout.put('A'); 显示单个字符。
put也可级联使用
cout.put('A').put('\n');

cout.put(‘A’); 效果基本等同于 cout<<‘A’;
cout.put(‘AAAA’); //错误,只能输出单个字符
warning: overflow in implicit constant conversion [-Woverflow]

write 成员函数

将内存中的一块内容写到一个文件输出流中

从字符数组中输出字节到文件中去

四、输入流

1. 构造输入流对象打开文件——用于读取


文件输入流的默认打开模式 ios::in

2. 输入流相关函数

get成员函数

功能和 >> 很像,主要的不同点在于 get函数在读入数据时包括空白字符

get函数在遇到文件尾的时候返回 EOF

getline 成员/非成员函数

读取多行字符,每读一行存储一次,可定义行分割符

  • 非成员函数

    函数原型 template<> std::istream &std::getline<...>(std::istream &__is, std::string &__str, char __delim)
    第一个参数传入输入流,第二个参数传入string字符串,第三个参数为自定义行分割符,getline读取到行分割符就结束本次读取,并将自定义的行分割符从流中删除

举例:分行读取文件中的内容

文件中的内容
123
456
789

#include<iostream>
#include<fstream>
using namespace std;
int main(){
    string line1;
    string line2;
    string line3;
    ifstream ifile("E:\\Codes\\Program-Cpp\\Zhenli_Book_Code\\11-7.txt");
    getline(ifile, line1);
    getline(ifile, line2,'5');   
    getline(ifile, line3);
    cout<<line1<<endl<<line2<<endl<<line3<<endl;
}

读取结果

123
4
6

  • 成员函数
    成员函数只能将读取到内容存储在字符数组中 char[ ]

    函数原型 template<> std::istream &std::istream::getline(char *__s, std::streamsize __n, char __delim)
    第一个参数时字符数组,第二个参数是读取的字节数,第三个参数为自定义行分割符
    读取的字节数已满或者已到自定义的行分割符,则getline都会结束本次读取,并将自定义的行分割符从流中删除

int main(){
   char buf1[10];
   char buf2[10];
   char buf3[10];

   ifstream ifile("E:\\Codes\\Program-Cpp\\Zhenli_Book_Code\\11-7.txt");
   ifile.getline(buf1,10,'2');
   ifile.getline(buf2, 10);
   ifile.getline(buf3, 10);
   cout<<buf1<<endl<<buf2<<endl<<buf3<<endl;
}

输出结果

1
3
456

read 成员函数

从文件中读取内容输入到字符数组中
由长度参数确定要读的字节数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞天小牛肉

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值