C++:istream、ostream和fstream类

1、基类 istream 和 ostream

(1)istream

A.What

输入流的抽象类,是所有输入流类的基类

B.Why(输入流的作用)

用于从数据源(如文件、标准输入设备等外部设备)读取数据到内存中

(2)ostream

A.What

输出流的抽象类,是所有输出流类的基类

B.Why(输出流的作用)

输出流用于将数据从内存中写入到目标位置(外部设备),例如文件或标准输出设备(通常是屏幕)

(3)输入输出流的状态

A.Which

goodbit:表示流处于正常状态,可以进行正常的输入和输出
eofbit:表示已经到达文件末尾或流的结束位置,当文件读取完毕时,eofbit会被设置为1
failbit:表示流操作失败,如尝试将字符写入只读文件、尝试从空文件中读取数据
badbit:表示流已经崩溃或数据出现问题,如打开不存在的文件、内存不足等

stream.good();
stream.eof();
stream.fail();
stream.bad();

B.How(如何操作流状态)

获取流的状态:stream.rdstate()

if(istream.rdstate() & std::ios_base::badbit)
{ 
	std::cout<<"badbit error!"<<std::endl;
}

复位流状态位:goodbit设置为1,其它设置为0

istream.clear();

设置指定状态位为1:但 stream.setstate(goodbit)不合法

istream.setstate(std::ios_base::failbit | std::ios_base::eofbit);

2、派生类fstream

(1)fstream

A.What

C++ 标准库中用于文件输入输出操作的文件流类

B.Why

实现对文件的输入和输出操作

C.文件打开方式

模式 说明
in 以读的方式打开文件
out 以写的方式打开文件,写数据后原文件将被覆盖
out | trunc 当以 trunc 模式打开文件时,如果该文件存在, 则先清空,后写入新数据。如果文件不存在,则创建
out | app 每次写操作均定位到文件末尾
binary 二进制形式打开文件(in&out)
ate 打开文件后立即定位到文件末尾(in&out)

(2)ifstream

A.What

文件输入流类,是istream的派生类

B.Why

用于实现从文件中读取数据

C.How

std::string strFilePth = "D:\\Desktop\\a.txt";
// 以读的方式打开文件
std::ifstream inStream;
inStream.open(strFilePth);
if (!inStream.is_open())
{
	std::cerr << "Failed to open file" << std::endl;
	return;
}
char ch[10];
while (inStream.read(ch, 10))
{
	
	std::cout << ch << std::endl;
}
inStream.close();

(3)ofstream

A.What

文件输出流类,是ostream的派生类

B.Why

用于向文件中写入数据

C.How

std::string strFilePth = "D:\\Desktop\\a.txt";
// 以写的方式打开文件
std::ofstream outStream;
outStream.open("D:\\Desktop\\a.txt", std::ios_base::app);
if (!outStream.is_open())
{
	std::cerr << "Failed to open file" << std::endl;
	return;
}
// 向文件中写入数据
int i = 0;
while (!outStream.eof())
{
	outStream << "wodeshijie" << std::endl;
	++i;
	if (i >= 10)
	{
		outStream.setstate(std::ios_base::eofbit);
		
	}
}
outStream.close();

相关推荐

  1. C++:istream、ostreamfstream

    2024-07-22 10:40:02       18 阅读
  2. Android中C++层fstream用法详解

    2024-07-22 10:40:02       41 阅读
  3. ServletConfigServletContext

    2024-07-22 10:40:02       44 阅读
  4. DateFormatSimpleDateFormat

    2024-07-22 10:40:02       31 阅读
  5. 普通抽象

    2024-07-22 10:40:02       28 阅读
  6. python对象

    2024-07-22 10:40:02       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 10:40:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 10:40:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 10:40:02       45 阅读
  4. Python语言-面向对象

    2024-07-22 10:40:02       55 阅读

热门阅读

  1. 4 DAY

    2024-07-22 10:40:02       14 阅读
  2. 数仓中主题域还是数据域?

    2024-07-22 10:40:02       15 阅读
  3. (day21)leecode hot100字母异位词分组

    2024-07-22 10:40:02       17 阅读
  4. WireGuard 编译安装

    2024-07-22 10:40:02       15 阅读
  5. 探索半监督学习的力量:半监督目标检测全解析

    2024-07-22 10:40:02       15 阅读
  6. PyTorch张量形状

    2024-07-22 10:40:02       18 阅读
  7. 深度学习落地实战:人脸面部表情识别

    2024-07-22 10:40:02       16 阅读
  8. Python中Selenium 和 keyboard 库的使用

    2024-07-22 10:40:02       12 阅读
  9. 【mybatis 一级缓存】

    2024-07-22 10:40:02       17 阅读