c++文件读写遇到的问题

这几天编程序正好需要读写文件,于是通过翻阅书籍查找相关知识。手头有本最基础的c++教程,是谭浩强的《C++程序设计》。查看这本书,在把最基本的一些知识弄懂了之后,便开始编程了。程序中遇到的一大问题就是二进制文件读写时,文件指针的操作。

      一开始就已经写了一大段代码,突然发现我要调用文件指针使其指向文件中的某个特定的位置,才突然意识到,我一直是按照读写顺序文件来操作的。没办法,为了实现移动指针的功能,我不得不从头更改文件的读写方式,并且将文件打开为二进制的文件。

       代码编写完后,开始试着操作一下,是否能实现自己的功能。文件的读写自然没有什么问题,只不过我想要实现能够循环读写文件,在这里,就遇到一些麻烦。因为要实现循环功能,所以在每次进行下一次循环的时候,都必须重置文件指针,使其指向文件的开头。实现这一点,可以调用seekg(ios::beg)函数来达到。但是试过很多次,有些时候这条语句是有用的,有的时候又是没有用的。为什么会出现这样的问题呢,百思不得其解。一次一次地看《C++程序设计》,也没有能够找到些眉目。后来在网上终于发现相关的解决方法,又看了一下《C++ Primer》,终于找到了症结所在。

       原来,在读完整个文件之后,就会标记eof,表示文件已经读完。此时,如果文件是可读可写方式打开的,调用seekg(),seekp(),或是write()一类的方法,是根本没有用处的。解决方法是,调用clear()方法,这样就可以清除掉eof标记。等到下一次调用seekg(),seekp(),或是write()方法时,也就不会有问题了。

       此外,如果上一次把整个文件刚好读完,其实此时还没有到eof。如果是循环读写,便会执行下一次循环。在下一次循环中,不会有新的内容读到内存中。此次循环结束后,就会标记eof了。

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值