C语言fopen等几个f函数用法.doc_第1页
C语言fopen等几个f函数用法.doc_第2页
C语言fopen等几个f函数用法.doc_第3页
C语言fopen等几个f函数用法.doc_第4页
C语言fopen等几个f函数用法.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言函数fopen函数简介函数功能: 打开一个文件 函数原型:FILE * fopen(const char * path,const char * mode); 相关函数:open,fclose,fopen_s1 ,_wfopen 所需库: 返回值: 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。 一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。 参数说明: 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。 mode有下列几种形态字符串: r 打开只读文件,该文件必须存在。 r+ 打开可读写的文件,该文件必须存在。 rb+ 读写打开一个二进制文件,只允许读写数据。 rt+ 读写打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留) wb 只写打开或新建一个二进制文件;只允许写数据。 wb+ 读写打开或建立一个二进制文件,允许读和写。 wt+ 读写打开或着建立一个文本文件;允许读写。 at+ 读写打开一个文本文件,允许读或在文本末追加数据。 ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。 上述的形态字符串都可以再加一个b字符,如rb、w+b或ab等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。 有些C编译系统可能不完全提供所有这些功能,有的C版本不用r+,w+,a+,而用rw,wr,ar等,读者注意所用系统的规定。表格 1. fopen() 中的 mode 的可能值列表 mode说明r只读方式打开,将文件指针指向文件头。 r+读写方式打开,将文件指针指向文件头。 w写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 w+读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 a写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 a+读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 x创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 x+创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 注: 不同的操作系统家族具有不同的行结束习惯。当你写入一个文本文件并想插入一个新行时,你需要使用符合你操作系统的行结束符号。基于 Unix 的系统使用 n 作为行结束字符,基于 Windows 的系统使用 rn 作为行结束字符,基于 Macintosh 的系统使用 r 作为行结束字符。 如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。 Windows 下提供了一个文本转换标记(t)可以透明地将 n 转换为 rn。与此对应你还可以使用 b 来强制使用二进制模式,这样就不会转换你的数据。要使用这些标记,要么用 b 或者用 t 作为 mode 参数的最后一个字符。 默认的转换模式依赖于 SAPI 和你使用的 PHP 版本,因此为了便于移植鼓励你总是指定恰当的标记。当操作以 n 作为行结束定界符的纯文本文件时,如果你还期望这些文件可以用于其它应用程序例如 Notepad,则应该在脚本中使用 t 模式。在所有其它情况下使用 b。 在操作二进制文件时如果没有指定 b 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 rn 字符的奇怪问题。 注: 为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 b 标记。 注: 再一次,为移植性考虑,强烈建议你重写那些依赖于 t 模式的代码使其使用正确的行结束符并改成 b 模式。 如果也需要在 include_path 中搜寻文件的话,可以将可选的第三个参数 use_include_path 设为 1 或 TRUE。 如果打开失败,本函数返回 FALSE。 程序示例程序示例1 #include #include /为了使用exit() int main() int ch; FILE* fp; char fname50; /用于存放文件名 printf(输入文件名:); scanf(%s,fname); fp=fopen(fname,r); /只供读取 if(fp=NULL) /如果失败了 printf(错误!); exit(1); /中止程序 /getc()用于在打开文件中获取一个字符 while(ch=getc(fp)!=EOF) putchar(ch); fclose(fp); /关闭文件 return 0; Djx:#include #include /为了使用exit()int main() int ch; FILE* fp; char fname50; /用于存放文件名 printf(输入文件名:); scanf(%s,fname); fp=fopen(fname,r); /只供读取 if(fp=NULL) /如果失败了 printf(错误!); exit(1); /中止程序 /getc()用于在打开文件中获取一个字符 while(ch=getc(fp)!=EOF) putchar(ch); fclose(fp); /关闭文件 system(pause);return 0; 注意!初学者往往会犯一个错误,即在输入文件名时不加后缀名,请注意加上! 程序示例22 #include FILE *stream, *stream2; int main( void ) int numclosed; / Open for read (will fail if file crt_fopen.c does not exist) if( (stream = fopen( crt_fopen.c, r ) = NULL ) / C4996 / Note: fopen is deprecated; consider using fopen_s instead printf( The file crt_fopen.c was not openedn ); else printf( The file crt_fopen.c was openedn ); / Open for write if( (stream2 = fopen( data2, w+ ) = NULL ) / C4996 printf( The file data2 was not openedn ); else printf( The file data2 was openedn ); / Close stream if it is not NULL if( stream) if ( fclose( stream ) ) printf( The file crt_fopen.c was not closedn ); / All other files are closed: numclosed = _fcloseall( ); printf( Number of files closed by _fcloseall: %un, numclosed ); 说明 resource fopen ( string filename, string mode , bool use_include_path , resource zcontext ) fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 scheme:/. 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。 如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了 安全模式 或者 open_basedir 则会应用进一步的限制。2 函数名: fclose 功 能: 关闭一个流。注意:使用fclose函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。 用 法: int fclose(FILE *stream);fread函数和fwrite函数C,C+编程 2009-07-01 21:14:23 阅读1686 评论3 字号:大中小订阅 source: /an-wl/archive/2008/10/21/1316292.html1.函数功能 用来读写一个数据块。2.一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp);3.说明 (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。 (2)size:要读写的字节数; (3)count:要进行读写多少个size字节的数据项; (4)fp:文件型指针。注意:1 完成次写操(fwrite()作后必须关闭流(fclose();2 完成一次读操作(fread()后,如果没有关闭流(fclose(),则指针(FILE * fp)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出; 3 fprintf() : 按格式输入到流,其原型是int fprintf(FILE *stream, const char *format, argument, .);其用法和printf()相同,不过不是写到控制台,而是写到流罢了。注意的是返回值为此次操作写入到文件的字节数。如int c = fprintf(fp, %s %s %d %f, str1,str2, a, b) ;str1:10字节;str2: 10字节;a:2字节;b:8字节,c为33,因为写入时不同的数据间自动加入一个空格。文件使用之后一定要关闭,否则将不能正确显示内容.fwrite:读入两个学生信息然后用fwrite存入文件fread:用fread从文件中读出学生信息。fwrite.c#include #define SIZE 2struct student_typechar name10;int num;int age;char addr10;studSIZE;void save()FILE *fp;int i;if(fp=fopen(stu_list,wb)=NULL) printf(cant open the file); exit(0);for(i=0;iSIZE;i+) if(fwrite(&studi,sizeof(struct student_type),1,fp)!=1) printf(file write errorn);fclose(fp);main()int i;for(i=0;iSIZE;i+) scanf(%s%d%d%s,&,&studi.num,&studi.age,&studi.addr); save();for(i=0;iSIZE;i+) printf(%s,%d,%d,,studi.num,studi.age,studi.addr);fread.c#include #define SIZE 2struct student_typechar name10;int num;int age;char addr10;studSIZE;void read()FILE *fp;int i;if(fp=fopen(stu_list,rb)=NULL) printf(cant open the file); exit(0);for(i=0;iSIZE;i+) if(fread(&studi,sizeof(struct student_type),1,fp)!=1) printf(file read errorn);fclose(fp);main()int i;read();for(i=0;iSIZE;i+) printf(%s,%d,%d,%s,,studi.num,studi.age,studi.addr); printf(n);printf与fprintf函数的区别printf是标准输出流的输出函数,用来向屏幕这样的标准输出设备输出,而fprintf则是向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上printf是有缓冲的输出,fprintf没有缓冲fprintf()传送输出到一个流中的函数原形:int fprintf(FILE *stream,const char *format,argument,.)功能 :向文件指针指向的文件输出ASC代码向显示器输出错误信息 使用形式:fprintf(文件指针,输出格式,输出项系列);fprintf(stderr,错误信息);使用实例:fprintf(stream,%d %c %f,i,c,f);其中定义FILE *stream;int i;char c;float f;返回值:成功则返回输出的字节数,错误则返回EOF。头文件:stdio.h=sprintf()格式化输出到数组的函数原形int sprintf(buf,format,arg_list)其中char *buf;功能把arg_list参量的值按format的格式输出到buf中。例sprintf(buffer,相对扇区号%s(其中柱面号为%d/磁头号为%d/扇区号为%d),string,cyls,head,sector);其中char buffer100;char *string=;int cyls,head,sector;返回值实际写入数组的字符个数。头文件stdio.hsprintf 是个变参函数,定义如下:int sprintf(char *buffer,const char *format , argument . );除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。格式化数字字符串sprintf 最常见的应用之一莫过于把整数打印到字符串中.格式化读写函数fscanf和fprintffscanf函数,fprintf函数与前面使用的scanf和printf 函数的功能相似,都是格式化读写函数。 两者的区别在于 fscanf 函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。这两个函数的调用格式为: fscanf(文件指针,格式字符串,输入表列); fprintf(文件指针,格式字符串,输出表列); 例如:fscanf(fp,%d%s,&i,s);fprintf(fp,%d%c,j,ch);用fscanf和fprintf函数也可以完成以上学生信息的问题。修改后的程序下所示。#includestruct stuchar name10;int num;int age;char addr15;boya2,boyb2,*pp,*qq;main()FILE *fp;char ch;int i;pp=boya;qq=boyb;if(fp=fopen(stu_list,wb+)=NULL)printf(Cannot open file strike any key exit!);getch();exit(1);printf(ninput datan);for(i=0;iname,&pp-num,&pp-age,pp-addr);pp=boya;for(i=0;iname,pp-num,pp-age,pp-addr);rewind(fp);for(i=0;iname,&qq-num,&qq-age,qq-addr);printf(nnnametnumber age addrn);qq=boyb;for(i=0;iname,qq-num, qq-age,qq-addr);fclose(fp);Ferror和clearerr函数名: ferror 功 能: 在调用各种输入输出函数(如 putc.getc.fread.fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。 它的一般调用形式为 ferroe(fp);如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。应该注意,对同一个文件 每一次调用输入输出函数,均产生一个新的ferror函 数值,因此,应当在调用一个输入输出函数后立即检 查ferror函数的值,否则信息会丢失。在执行fopen函数时,ferror函数的初始值自动置为0。 用 法: int ferror(FILE *st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论