【积累】fopen打开文件时位置指针的问题

      最近在写一个程序是涉及到文件的操作,其中遇到一个问题是打开文件后判断文件是否为空,刚开始想到了每次打开文件都是向文件添加数据,就是以a+方式打开,就想到用ftell函数直接得到当前位置如果不为0则说明文件不为空,但是这样程序运行一直没打到想要的效果,调试时发现打开文件后用ftell函数得到的当前位置值为零,自己不禁产生疑惑,后来翻了下谭浩强的《C程序设计》上面写着“用a+方式打开的文件,原来的文件不被删除,位置指针移到文件末尾”。为了消除疑惑自己写代码测试下,看下具体情况。


   测试代码:

#include <stdio.h>





int main(void)

{

	int ch;



	FILE *fp;

	char fname[]="IN.DAT";

	

	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));

				fclose(fp);

				

		}

			return 0;

}


 运行结果:

  【积累】fopen打开文件时位置指针的问题

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

你可能感兴趣的:(open)