C++ 标准 IO库

IO标准库类型和头文件

在这里插入图片描述

IO对象不可复制或赋值

条件状态

IO标准库管理一系列条件成员,用来标记IO对象是否处于可用状态,或者碰到了哪些错误。

IO标准库的条件状态作用
strm::iostate机器相关的整型名,由各个iostream类定义,用于定义条件状态
strm::badbitiostate类型的值,用于指出破坏的流
strm::failbitiostate类型的值,用于指出失败的IO操作
strm::eofbitiostate类型的值,用于指出流已经到大文件结束符
s.eof()如果设置了流s的eofbit值,返回true
s.fail()如果设置了流s的failbit值,返回true
s.bad()如果设置了流s的badbit值,返回true
s.good()如果流s处于有效状态,返回true
s.clear()将流s中的所有状态值设置为有效状态
s.clear(flag)将流s中的某个指定条件状态设置为有效,flag的类型是strm::iostate
s.setstate(flag)给流s添加指定条件,flag的类型是strm::iostate
s.rdstate()返回流s的当前状态
  • badbit 标志着系统级的故障,如无法恢复的读写错误。
  • 如果是可恢复的错误,此时设置failbit标志,这种导致设置failbit的问题是可以修正的
  • eofbit 是在遇到文件结束符设置的,此时同时设置了failbit
  • clear和setstate操作用于改变条件成员的状态

文件流对象的使用

fstream头文件提供了三种支持文件IO的类型

  • ifstream 提供读文件的功能
  • ofstream 提供些文件的功能
  • fstream 提供读写同一个文件的功能

对象绑定文件

#include<fstream>
#include <iostream>
using namespace std;


int main() {
	// 假设当前目录中有infile.txt 和 outfile.txt
	// 要将文件和ifstream或ofstream对象连接起来
	ifstream infile("infile.txt");
	ofstream outfile("outfile.txt")
}

或者

	ifstream infile;
	ofstream outfile;
	infile.open("infile.txt");
	outfile.open("outfile.txt");

重新绑定

int main(){
	ifstream infile;
	ofstream outfile;
	infile.open("infile.txt");
	outfile.open("outfile.txt");
	//重新捆绑
	ifstream infile("infile.txt");
	infile.close();
	infile.open("next.txt");
}

清除文件流的状态

假设要读取多个文件,并进行操作。方法有二

1、将文件对象创建循环体内(while 或者 for)

这样的话,没循环一次便要产生一次对象

#include<fstream>
#include <iostream>
#include<vector>
#include<string>
using namespace std;


int main() {
	// 有多个文件
	vector<string> file_name = { "a", "b", "c","d" };
	vector<string>::iterator it = file_name.begin();
	while (it != file_name.end()) {
		ifstream input(it->c_str());
		if (!input) {
			break;
		}
		/*
		进行读取文件后的操作
		*/
		it++;	
	}
}

2、将文件对象建立在循环体外

如果不想重复多次建立流对象,可以将之定义在循环体外,但是这样必须要注意管理流的状态。如果遇到文件结束符或其他错误,将设置流的内部状态,以便以后不允许再对流做读写操作。关闭流不能改变流的内部状态

读写失败后,对象的状态将会保持错误模式,直到执行clear操作重新恢复流的状态。

int main() {
	// 有多个文件
	vector<string> file_name = { "a", "b", "c","d" };
	vector<string>::iterator it = file_name.begin();
	//在此定义文件对象
	ifstream input;
	while (it != file_name.end()) {
		ifstream input(it->c_str());
		if (!input) {
			break;
		}
		/*
		进行读取文件后的操作
		*/
		it++;	
		input.close();
		input.clear();
		
	}
}

文件模式

文件模式功能
in打开文件进行读操作
out打开文件进行写操作
app在每次写之前找到文件尾
ate打开文件后将文件定位在文件尾
binary以二进制模式进行IO操作

默认时,与ifstream流对象进行关联的文件将以in模式打开。

与ofstream流对象进行关联的文件则以out模式打开,使文件可写。以out模式打开的文件将会清空;丢弃文件存储的所有数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值