文件流对象open一个文件时会重置流状态吗??会?不会?

在Linux环境下,使用C++ Primer第四版中的代码示例,通过观察g++ 4.4.7编译运行的结果,文章探讨了`std::ifstream::open()`方法对文件流状态的影响。实验结果显示,调用open()方法后,原本处于错误状态的文件流input成功重置,恢复到正常状态,能够继续读取文件内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文链接:http://blog.youkuaiyun.com/ncepuwanghui/article/details/23711783


C++Primer(中文版)第四版

据P253 可知,
1)若读某个文件时,当读到文件结束符时,会将文件流对象的 eofbit 和 failbit  置1,流动对象发生错误,无法使用。需要调用clear()来重置流状态。
2)将文件流与新文件重新绑定时,必须先关闭当前文件,,然后打开另一个文件。
【Question】
若重用文件流对象,来读写多个文件,这时若读取一个文件结束时,会使流处于错误状态。如果只是close文件流,而不调用clear()重置流状态,然后重新打开另一个文件,这时,流仍处于错误状态,无法正常使用。
如果需要重用文件流读写多个文件,必须在读另一个文件之前调用clear()重置流状态。
以上是根据C++Primer P253得出的结论。

但是我在实际测试后发现,文件流对象调用open()打开一个文件时会自动重置流状态,而不像上面说的维持原有流状态不变。

代码如下:

#include <iostream>
#include <fstream>
#include <vector>
#include <limits>
void process(const std::string &str)
{
        std::cout << str << std::endl;
}

int main(int argc, const char* argv[])
{
        std::string ifile = "ifile.in";
        std::string ofile = "ofile.out";
        
        //在创建流对象的时候绑定要读写的文件
        /*
        std::ifstre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值