C语言:fopen模式比较

fopen 模式

属     性

r

w

a

r+

w+

a+

文件必须已存在

Y

N

N

Y

N

N

文件内容将丢失

N

Y

N

N

Y

N

允许从流读取(fread)

Y

N

N

Y

Y

Y

允许写入到流(fwrite)

N

Y

Y

Y

Y

Y

从流的末尾写入

N

N

Y

N

N

Y

任意定位(fseek)

Y

Y

Y

Y

Y

N

 

 

 

 

 

 

 

 

 

 

当操作的文件的文件是二进制文件的时候,流的模式可以指定符中添加字母b进行表示,b可以出现在+号的之前或之后 例如:rb,wb,a+b,ab+

参考:《C语言参考手册》 p284,p285

 

r+ ,w+,a+ 几种模式解析

 

虽然r+,w+两种模式都是可以进行进行读写操作,但是w+打开文件的时候会清除掉文件内容,因此当需要对文件内容进行随机访问和读写的时候,坚决的不能使用这种模式,以r+方式进行fwrite的时候只会覆盖掉文件的当前流位置之后的若干字节

想象一个场景:如果文件是一种小型数据库,每一笔记录都是一个等长数据块,因此对于数据的更新操作,就要支持随机访问,想要修改第3笔记录的某个字段值完全就可以算出偏移量((3-1) * 定长数据的长度)然后fseek过去,直接fwrite,如果是w+的方式打开,那么将丢失文件内容,此时的操作产生的影响:未知

a+模式从fopen模式表来看应该算是最强大的模式了,不过实际情况看起来是这个模式无法完成更新文件的作用,无论如何使用fseek进行定位,这个文件的流的起始位置始终在文件末尾,也就是说它无法替代r+,w+这两种模式

总结:如果要对文件进行读写的话,尽量以r+方式打开文件,w+实在是一种危险的打开方式,而对于a+的应用场景我想它则只能用于追加数据,最强大最安全的方式还是r+

#include <stdio.h>
FILE *fp = fopen(filename,"r+");
assert(fp != NULL);
//assert会报错,而w,a则不会


转载于:https://www.cnblogs.com/code-style/archive/2012/03/14/2397043.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值