程序示例
示例一
1 #include<stdio.h> 2 3 #defineF_PATH"d:\myfile\file.dat" 4 intmain(void) 5 { 6 FILE*fp=NULL;//需要注意 7 fp=fopen(F_PATH,"r"); 8 if(NULL==fp) 9 { 10 return-1;//要返回错误代码 11 } 12 fclose(fp); 13 fp=NULL;//需要指向空,否则会指向原打开文件地址 14 return0; 15 }
示例二
示例二
示例三
1 #include<stdio.h> 2 #include<stdlib.h>//为了使用exit() 3 intmain() 4 { 5 charch; 6 FILE*fp=NULL; 7 charfname[50];//用于存放文件名 8 printf("输入文件名:"); 9 scanf("%s",fname); 10 fp=fopen(fname,"r");//只供读取 11 if(fp==NULL)//如果失败了 12 { 13 printf("错误!"); 14 exit(1);//中止程序 15 } 16 while((ch=getc(fp))!=EOF) 17 putchar(ch); 18 fclose(fp);//关闭文件 19 return0; 20 }
示例三
1 #include<stdio.h> 2 3 FILE*stream,*stream2; 4 5 intmain(void) 6 { 7 intnumclosed; 8 //Openforread(willfailiffile"crt_fopen.c"doesnotexist) 9 if((stream=fopen("crt_fopen.c","r"))==NULL)//C4996 10 //Note:fopenisdeprecated;considerusingfopen_sinstead 11 printf("Thefile'crt_fopen.c'wasnotopened "); 12 else 13 printf("Thefile'crt_fopen.c'wasopened "); 14 //Openforwrite 15 if((stream2=fopen("data2","w+"))==NULL)//C4996 16 printf("Thefile'data2'wasnotopened "); 17 else 18 printf("Thefile'data2'wasopened "); 19 //ClosestreamifitisnotNULL 20 if(stream) 21 { 22 if(fclose(stream)) 23 { 24 printf("Thefile'crt_fopen.c'wasnotclosed "); 25 } 26 } 27 //Allotherfilesareclosed: 28 numclosed=_fcloseall(); 29 printf("Numberoffilesclosedby_fcloseall:%u ",numclosed); 30 }
函数简介
函数原型:FILE * fopen(const char * path,const char * mode);
参数说明:
r+ 以可读写方式打开文件,该文件必须存在。
rw+ 读写打开一个文本文件,允许读和写。
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。
二进制和文本模式的区别
1.在windows系统中,文本模式下,文件以"
"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"
"时,函数会自动在"
"前面加上"
"。即实际写入文件的是"
" 。
2.在类Unix/Linux系统中文本模式下,文件以"
"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。
打开方式总结:各种打开方式主要有三个方面的区别:
①打开是否为二进制文件,用“b”标识。
②读写的方式,有以下几种:只读、只写、读写、追加只写、追加读写这几种方式。
③对文件是否必须存在、以及存在时是清空还是追加会有不同的响应。具体判断如下图。