您的位置:首页 > 运维架构

关于fopen函数的总结

2016-03-07 16:09 471 查看
文件函数fopen的使用时要选择函数的打开方式,而这几个打开方式其中千秋绝对不是一个表格所能够包含的,下面用自己的话来总结一下加强自己理解与记忆! 这里有一个大的前提,就是凡是以字母b结尾的都是对二进制文件进行操作,不是以b结尾的都是对文本文件进行操作。以+符号结尾的都是有关于读和写的操作,而没有加号的要么是只读,要么是只写,没有都具有又读又写的操作。 #:a,ab,a+,ab+ 这四种使用文件的方式应该是比较简单地(对于其他的使用方式而言)。a的文件使用方式是向文本文件添加数据,ab的方式是向二进制文件添加数据,这两种使用方式都只能是向尾部添加数据,没有其他的功能,而且每次添加数据时文件位置标记都是在文件的末尾;举例 源代码:#include<stdio.h>main(){ int n,m; n=1; m=2; FILE *pa; pa=fopen("实验文件","a"); fprintf(pa,"%d",n); fclose(pa); FILE *pb; pb=fopen("实验文件","a"); fprintf(pb,"%d",m); fclose(pb); } 这里要注意一下,在运行上面的代码之前,要创建一个实验文件,只有这样程序才能够的到结果。在运行程序前,先格式化实验文件,让后运行程序,发现实验文件中的数据为12,再一次运行程序,发现实验文件中的数据为1212,这就不难说明a的的使用文件方式的作用给文件添加数据,而且每次添加数据时,文件位置标记都是指向文件的末端!这里将a改成ab得到的结果是不变的! a+,ab+分别有a,ab的全部功能,不同的是,a+,ab+不仅能够写,还能够读!举例 源代码;#include<stdio.h>main(){ double n; FILE *pa; pa=fopen("实验文件","a+"); fscanf(pa,"%lf",&n); fclose(pa); printf("%.0lf",n); } 这里要注意一下:实验文件是提前建立好的,而且里面储存有数据12121212,运行程序时发现输出的值是12121212,去相关的文件查询,用记事本打开发现实验文件中确实储存的是12121212,这里用ab+运行程序得到的也是一样的结果,这也就说明a+,ab+不仅具有写入的功能,同时也具有读出的功能!#:w,wb,w+,wb+ 以w开头的文件使用方式最显著的特点是在输出数据时,它先会把原来储存在原文件中的信息格式化,然后再输入数据,假使原文件并不存在,则会自动的建立一个文件,然后再进行输入数据!举例 源代码:#include<stdio.h>main(){ int n; n=100; FILE *pa; pa=fopen("实验文件","w"); fprintf(pa,"%d",n); fclose(pa); } 第一种情况是:在外存中没有实验文件然后运行函数,发现外存中被建立了一个实验文件,而且实验文件中被储存了一个数据100; 第二种情况是:先把实验文件中的100改成12121212(其他任意数据),然后运行程序,去外存中检查文件中的数据情况,发现之前被改的数据12121212被替换成为了100; 以上的两种情况将w替换成为wb情况也是一致的,经过上面的情况,说明了w,wb,的文件使用方式是假使存在文件,它会先把文件格式化,让后再输出数据,假使不存在该文件,则会新建一个文件。 其实就现在自己的理解而言,我觉得w,wb,w+,wb+这之间两两其实并没有什么区别,虽然w+,wb+多了个可读的操作,但是我感觉这个操作本身并没有什么意义,因为这个在可读之前文件其实已经被格式化了,假使你再去读,读出来的数据好像也就没什么意义了,所以,现在的认知中可以认为,w开头的文件打开方式的作用就是新建一个文件夹与文件夹的格式化!例子 源代码:#include<stdio.h>main(){ int n; FILE *pa; pa=fopen("实验文件","w+"); fscanf(pa,"%d",&n); fclose(pa); printf("%d\n",n); } 上个函数输出的n值虽然有争议(好像是因为编程软件版本的问题),但是可以肯定的是输出的n绝对不是在文件格式化之前所储存的那个数据!#:r,rb,r+,rb+ r,rb,都只能进行操作只读,只能够输入数据。例子 源程序:#include<stdio.h>main(){ int n; FILE *pa; pa=fopen("实验文件","r"); fscanf(pa,"%d",&n); fclose(pa); printf("%d\n",n); } 在实验文件中事先储存了一个数据1234,经过上个程序的运行后发现,输出的数据与储存的数据是一致的,所以说明了r的作用是输入数据。假使吧r改成rb,其他的操作不变,所得到的结果其实也是一致的。 下面先对于几个源代码先来总结一下:例子 源代码:#include<stdio.h>main(){ FILE *p; p=fopen("实验文件","w"); fclose(p); int n,i; FILE *pa; pa=fopen("实验文件","a"); fprintf(pa,"1"); fprintf(pa,"2"); fclose(pa); FILE *pb; pb=fopen("实验文件","r"); fscanf(pb,"%d%d",&n,&i); fclose(pb); printf("%d %d",n,i); } 两个源代码输出的结果都12 3,这就说明,虽然输入是多次的,但是系统是识别不出来的,系统只会认为是空格前后分别为不同的数,所以,在写入数据时应该注意每个数据之间要用空格分开,这样在读出数据的时候才不会出现错误,知道了这个后改正源代码如下例子 源代码:#include<stdio.h>main(){ FILE *p; p=fopen("实验文件","w"); fclose(p); int n,i; FILE *pa; pa=fopen("实验文件","a"); fprintf(pa,"1 "); fprintf(pa,"2"); fclose(pa); FILE *pb; pb=fopen("实验文件","r"); fscanf(pb,"%d%d",&n,&i); fclose(pb); printf("%d %d",n,i); } 这样就输出了正确的结果1 2; 下面的过程是对r+函数写入方式的探究:#include<stdio.h>main(){ int n,i; n=7; i=8; FILE *pa; pa=fopen("实验文件","r+"); fprintf(pa,"%d",n); fprintf(pa,"%d",i); fclose(pa); } //首先文件没有数据,运行后文件中储存的数据是78
#include<stdio.h>main(){ int n,i; n=7; i=8; FILE *pa; pa=fopen("实验文件","r+"); fprintf(pa,"%d",n); fclose(pa); pa=fopen("实验文件","r+"); fprintf(pa,"%d",i); fclose(pa); } //文件中没有储存数据,运行源代码后文件中储存的数据尾8
#include<stdio.h>main(){ int n,i; n=7; i=8; FILE *pa; pa=fopen("实验文件","r+"); fprintf(pa,"%d",n); fclose(pa); printf(" "); pa=fopen("实验文件","r+"); fprintf(pa,"%d",i); fclose(pa); } //事先在文件中储存了两组数据,其格式为11 22,运行完源代码后去检查文件,发现里面的内容变更为81 22
#include<stdio.h>main(){ int n,i; n=7; i=8; FILE *pa; pa=fopen("实验文件","r+"); fprintf(pa,"%d",n); fclose(pa); printf("\n"); pa=fopen("实验文件","r+"); fprintf(pa,"%d",i); fclose(pa); } //事先在文件中储存了两组数据,其格式为11 22,运行完源代码后去检查文件,发现里面的内容变更为81 22
#include<stdio.h>main(){ int n,i; n=7; i=8; FILE *pa; pa=fopen("实验文件","r+"); fprintf(pa,"%d\n",n); fclose(pa); pa=fopen("实验文件","r+"); fprintf(pa,"%d",i); fclose(pa); } //事先在文件中储存了两组数据,其格式为11 22,运行完源代码后去检查文件,发现里面的内容变更为8 // 22
#include<stdio.h>main(){ int n,i; n=7; i=8; FILE *pa; pa=fopen("实验文件","r+"); fprintf(pa,"%d ",n); fclose(pa); pa=fopen("实验文件","r+"); fprintf(pa,"%d",i); fclose(pa); } //事先在文件中储存了两组数据,其格式为11 22,运行完源代码后去检查文件,发现里面的内容变更为8 22
综上的实验可以得到这样的一个结论:r+的写入方式为,在一次的文件的打开时,依次按fprintf的方式写入文件中,写入的格式被fscanf所控制!直到文件被关闭。值得注意的的是每一次文件的打开,那么文件位置标记就会移到文件的首位置,对文件进行替换式的写入!(这一点就是与a的方式写入的最大的区别) r方式的读出与a方式的读出基本上一致的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: