fopen中文件的几种打开模式比较

r:只读.
 
 w:只写,有create和truncate语义.
 
 r+:update模式,可以读和写,要求文件必须存在,且没有truncate语义.读和写共用同一个指针位置,且如果读之前有写操作发生,必须调用fflush或者fseek等文件定位操作。比如有文件out.txt:cds 555 ccc.
当以r+模式打开该文件并执行:
FILE* pFile=fopen("out.txt","r+");
fprintf(pFile,"%s","fff");
fflush (pFile);//或者是fseek(pFile,0,SEEK_CUR);
int d=0;
fscanf(pFile,"%d",&d);
cout<<d<<endl;

会输出555,并且文件被修改为fff 555 ccc。说明在调用了fprintf后,文件位置指针被移动了。而且如果不写fflush,会出现奇怪的现象,文件被修改为fff,且没有内容被读到d,输出0。

如果是写操作出现在读操作之后发生,那么在写操作之前,必须调用fseek等定位函数,否则不能成功更新文件。比如现在文件out.txt的内容是fff 123 ccc有如下操作:

FILE* pFile=fopen("out.txt","r+");
char str[10];
fscanf(pFile,"%s",str);
cout<<str<<endl;
fseek(pFile,1,SEEK_CUR);
fprintf(pFile,"%d",111);
fclose (pFile);
return 0;

会输出fff,并把文件修改为fff 111 ccc。但如果没有fseek操作,fprintf不会修改文件,文件内容还是fff 123 ccc。

w+:以update模式create文件,如果文件存在那么truncate它。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值