标准IO边读边写文件

首先以读写方式打开(r+   w+   a+都可以,不过要注意读写位置指针分别指向文件头、文件头、文件尾),一次读一个字符(此时读写位置指针指向此字节后面,判断后,若要转换,移动读写位置指针

fseek(fp,-1L,SEEK_CUR),再写入,由于在C中规定:以上述三种方式打开文件,既可读又可写,但在没有插入fseek()rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek(),rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以要转换读写状态。   

#include   <stdio.h>   
void   main()   
{   
   char   ch;   
   int   i=0;   
   FILE   *fp;   
   fp=fopen("d:\\tc\\aaa.txt","r+");   
   if(!fp)   
   {   
      printf("can   not   open   the   file!\n");   
      exit(0);   
   }   
   while(!feof(fp))   
   {   
      ch=fgetc(fp);   
      if(ch>='a'&&ch<='z')   
      {   ch=ch-32;   
          fseek(fp,-1L,SEEK_CUR);/*向前移动1个字节*/   
          fputc(ch,fp);   
          fseek(fp,0L,SEEK_CUR);/*转换读写状态,并不移动*/   
      }   
   }   
   fclose(fp);   
}

摘自《UNIX环境高级编程》:当以读和写类型打开一文件时,具有下列限制:

1)如果中间没有fflush、fseek、fsetpos或rewind,则在输出的后面不能直接跟随输入;

2)如果中间没有fseek、fsetpos或rewind,或者一个输出操作没有到达文件尾端,则在输入操作之后不能直接跟随输出;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值