c/c++读写文件(c++方法篇)之二

代码

在这里插入图片描述

代码中有几个重要的地方在下文中做下说明。

1.关于文件输出流中的刷新问题

我们写入writfile中的数据实际上是存在于缓存中,并没有真实写到文件中,此时就需要手动的触发刷新机制,可以通过以下方式触发:
1.执行flush成员函数;
2.执行close成员函数;
3.等待输出流对象执行析构函数;
4.按行输入时加入endl,需注意此时会额外增加’\n’字符。

这里要着重说的一种方法是,在写数据前,执行

setf(ios::unitbuf)

设置之后,写入流中的数据会不经过缓存直接写到文件中去,这样的好处是可以避免程序崩溃导致重要数据没有写入到文件中去。

2.seekg/seekp,tellg/tellp函数的使用

seekg/seekp这两个函数可以移动读取和写入文件时游标的位置,以代码中的seekg为例,文件读入流对象readfile在每次进行读操作时都会悄悄的移动光标位置,我们要向从头读取的话必须重新将读取游标放在开始位置。
使用tellg/tellp可以知道当前游标位置,一般开始位置为0,末尾位置为字节总数。

3.关于eof

只有在读到文件结束符时,执行eof才会返回非0值,代码中最开始我读取了89个字节后,以为此时eof会返回非0值,实际没有,查了资料后才明白,因为没有读到文件结束符,所以不会返回非0。后续在多次getline之后,eof会返回非0值了。

4.关于getline函数

输入输出流中存在另个getline函数,一个成员函数,另一个全局的,代码中用的是全局的的。

istream& getline (char s, streamsize n, char delim );* //成员函数

istream& getline ( istream& is, string& str, char delim ); //全局函数

5.rdbuf()接口

使用rdbuf接口可以很方便的将输入流的数据输出到输出流中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值