fopen打开文件时位置指针的问题 .

#include <stdio.h>
int main(void)
{
 int ch; 
 FILE *fp;
 char fname[]="IN.DAT";
 char tempch; 
 fp=fopen(fname,"w");
 if (fp!=NULL)
 {
  printf("以W方式打开,位置:%d\n",ftell(fp));
  fprintf(fp,"%s","open with w");
  printf("以W方式打开,写入数据后位置:%d\n",ftell(fp));
  fclose(fp);  
 }
 fp=fopen(fname,"r");
 if (fp!=NULL)
 {
  printf("以R方式打开,位置:%d\n",ftell(fp));  
  fclose(fp); 
 } 
 fp=fopen(fname,"a+");
 if (fp!=NULL)
 {
  printf("以a方式打开,位置:%d\n",ftell(fp));
  fprintf(fp,"%s","open with a+");
  printf("以a方式打开,写入数据后位置:%d\n",ftell(fp));
  rewind(fp);
  printf("以a方式打开,但rewind函数后,写入数据后位置:%d\n",ftell(fp));
  fprintf(fp,"%s","after rewind function");
  printf("以a方式打开,但rewind函数后且写入字符串after rewind function,写入数据后位置:%d\n",ftell(fp));
  rewind(fp);
  while((tempch=fgetc(fp))!=EOF)
   printf("%c",tempch);
  fclose(fp); 
 }
 return 0;
}
  
 
最近在写一个程序是涉及到文件的操作,其中遇到一个问题是打开文件后判断文件是否为空,刚开始想到了每次打开文件都是向文件添加数据,就是以a+方式打开,就想到用ftell函数直接得到当前位置如果不为0则说明文件不为空,但是这样程序运行一直没打到想要的效果,调试时发现打开文件后用ftell函数得到的当前位置值为零,自己不禁产生疑惑,后来翻了下谭浩强的《C程序设计》上面写着“用a+方式打开的文件,原来的文件不被删除,位置指针移到文件末尾”。为了消除疑惑自己写代码测试下,看下具体情况。

   总结:1)可以发现用fopen函数打开文件时,位置指针都是处在文件开头处,包括用a和a+方式打开,只是在第一次写时位置指针会移动到文件末尾处。

2)只要用"a”方式打开,那么无论用fseek,rewind等文件位置指针定位函数,在写入文件信息时,均只能写入到文件末尾。

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值