zoukankan      html  css  js  c++  java
  • 【积累】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函数打开文件时,位置指针都是处在文件开头处,包括用a和a+方式打开,只是在第一次写时位置指针会移动到文件末尾处。

  • 相关阅读:
    5. JVM虚拟机栈
    4. 程序计数器
    3. JVM运行时数据区
    2. 类加载
    1. JVM体系结构
    SpringCloud 网关组件Gateway
    SpringCloud Hystrix断路器的基本使用
    SpringCloud Ribbon和Feign 的使用和源码分析
    反向代理的概念
    事务mysql
  • 原文地址:https://www.cnblogs.com/ljhero/p/1964708.html
Copyright © 2011-2022 走看看