C++文件流状态的判别与定位

本文介绍了C++中如何判断文件流的状态,包括is_open(), good(), fail(), bad() 和 eof()函数的使用。同时详细阐述了文件流的定位方法,包括输入定位的seekg()和tellg(),输出定位的seekp()和tellp(),以及相对定位的不同参考位置。" 116458955,10204942,Mybatis-Plus BaseMapper详解与实战,"['Java', 'Mybatis-Plus', '数据库操作', 'Spring Boot', '代码生成']

》文件流状态的判别

        可以用文件流对象的下列成员函数来判别文件流的当前状态:

        # is_open():判定流对象是否与一个打开的文件相联系,若是,返回true,否则返回false

        # good():刚进行的操作成功时返回true,否则返回false

        # fail():与good()相反,刚进行的操作失败时返回true,否则返回false

        # bad():如果进行了非法操作返回true,否则返回false

        # eof():进行输入操作时,若到达文件尾返回true,否则返回false

    

》文件流的定位

        C++流的定位操作主要针对文件流。

          (1)文件位置与定位方式

           C++流的位置有两种:输入(get)位置和输出(put)位置。输入流只有输入位置,流对象中标志这种位置的指针称为输入指针。输出流只有输出位置,流对象中标志这种位置的指针称为输出指针。输入输出流两种位置都有,因而同时具备输入指针和输出指针,这两个指针可以分别加以控制,互不干扰。文件流中这两个指针统称文件指针。

           每一次输入或输出都是从指针所指定的位置处开始的,指针在输入输出过程中不断移动,完成输入输出后即指向下一个需要输入输出的位置。

           C++流中既可以对文件指针进行绝对定位,也可以相对定位。对文件指针进行相对定位时有三种参考位置,它们是定义在ios_base::seek_dir中的一组枚举符号:

                     # ios_base::beg    相对于文件首

                     # ios_base::cur     相对于当前位置(负数表示当前位置之前)

                     # ios_base::end    相对于文件尾

          (2)输入定位

            输入流对象中与输入定位有关的成员函数:

                     #istream_type& seekg(off_type& off,ios_base::seek_dir dir);

                     按方式dir将输入定位于相对位置off处,函数返回流对象本身的引用。例如:假设input是一个istream类型的流

                            input.seekg(-1000,ios::cur);

                     表示使读指针指向以当前位置为基准向前移动100个字节处。

                     #pos_type tellg();

                     返回当前的输入位置,即从流开始处到当前位置的字节数。

                     #bool eof() const;

                     判定输入流是否结束,结束时返回true,否则返回false

          (3)输出定位

           在输出流对象中与输出定位有关的成员函数:

                     #ostream_type& seekp(pos_type pos);

                     (绝对定位)将输出流定位于绝对位置pos,函数返回流对象本身的引用。

                     #ostream_type& seekp(off_type off,ios_base::seekdir dir);

                     (相对定位)按方式dir将输出流定位于相对位置off处,函数返回流对象本身的引用。

                     #pos_type tellp();

                     返回当前的输出位置(pos_type通常就是long),即从流开始处到当前位置的字节数。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值