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();