概念
流是信息流动的一种抽象
一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动
流对象与文件操作:
1、程序建立一个流对象
2、指定这个流对象与某个文件对象建立连接
3、程序操作流对象
4、流对象通过文件系统对所连接的文件对象产生作用
提取与输出
1、读操作在流数据抽象中被称为(从流中)提取
2、写操作被称为向流中插入
输出流
输出流是向文件中打印信息
最重要的三个输出流:
1、ostream
2、ofstream
3、ostringstream
预先定义好的输出流对象:
1、cout:标准输出
2、cerr:标准错误输出,没有缓冲,发送给它的内容立即被输出
3、clog:类似于cerr,但是有缓冲,缓冲区满时被输出
读取一个本地磁盘的文件
如果要使用文件流将信息输出到文件,便需要使用构造函数建立流对象
ofstream myFile;
myFile.open("filename");
ofstream myFile("filename");
ofstream file;
file.open("FILE1");
file.close();
file.open("FILE2");
file.close();
使用插入运算符和操纵符
插入:"<<"
输出宽度:
setw操纵符或调用width成员函数为每个项指定输出宽度
#include <bits/stdc++.h>
using namespace std;
int main(){
double values[5]={1.23,35.36,653.7,43598.24};
for(int i=0;i<4;++i){
cout.width(10);
cout<<values[i]<<endl;
}
}
相当于每一个输出的数据设置了10个宽度(默认用空格填充,若超过则按原长度输出)
setw和width仅影响紧随其后的域
#include <bits/stdc++.h>
using namespace std;
int main(){
double values[5]={1.23,35.36,653.7,43598.24};
cout.width(10);
for(int i=0;i<4;++i){
cout<<values[i]<<endl;
}
}
cout.fill('*')
setfill("*")
除了setw和width的流格式以外的流格式保持有效直到发生改变
对齐方式
输出流默认为右对齐文本
cout<<setiosflags(ios_base::left)<<resetiosflags(ios_base::left)
setiosflags操纵符来设置左对齐(ios_base::left是ios_base的静态常量,因此引用时必须包括ios_base::前缀),resetiosflags操纵符关闭左对齐
缓冲区
-
标准库 提供缓冲是为了减少对read和write的调用(能更高效地处理输入和输出)
-
缓冲区是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区
精度
浮点数输出精度默认值是6(小数位数加上整数位数总共6位)(会4舍5入)
setprecision设置浮点数小数位数(包括小数点)
ios_base::fixed(强制输出6位小数,例:100.0——100.000000。前提是浮点数)
ios_base::scientific
进制
dec十进制
hex十六进制(默认大写)
oct八进制
文件输出流成员函数
open函数
close函数
put函数
write函数
例子
#include <bits/stdc++.h>
using namespace std;
int main(){
ofstream file("filename.dat");
char a[10]={"123456789"};
file.write(a,10);
file.put('A');
}
此时,在同目录下,产生一个dat文件,名为filename
文件内容为:
seekp和tellp函数
错误处理函数
二进制输出文件
最初设计流的目的是用于文本,因此默认的输出模式是文本方式
字符串输出流

输入流
输入流是从文件读取信息
构造输入流对象
使用提取运算符
输入流操纵符
输入流相关函数
输入流的open函数
输入流的close函数
close成员函数关闭与一个文件输入流关联的磁盘文件
虽然ifstream类的析构函数可以自动关闭文件,但是如果需要使用同一流对象打开另一文件,则首先要用close函数关闭当前文件
get函数
getline函数
read函数
seekg和tellg函数
这些函数简单看看就好了
字符串输入流
它和字符串输出流的区别:
字符串输出流——将变量v的值以string类型转出来(v本身没有变化)
字符串输入流——将string转成v的数据类型写入变量v中(v仍是定义时的类型)