资源描述
Edit Master title,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,C语言程序设计,(第三版),*,第十章,文件,主要内容,10.1 文件概述,10.2 文件类型指针,10.3 文件的翻开与关闭,10.4 文件的读写,10.5 文件的定位,10.1 C文件概述,文件:,文件指存储在外部介质(如磁盘磁带)上,数据的集合。,文件的分类,按数据的组织形式:,ASCII文件,(文本文件):每一个字节放一个ASCII代码,二进制文件,:把内存中的数据按其在内存中的存储形,式.,10.1 C文件概述(续),按文件存取方式分:,顺序存取文件,随机存取文件,10.2 文件类型指针(续),文件型指针变量:,FILE *fp;,fp是一个指向FILE类型结构体的,指针变量。如果有个文件,一般应设个指针,变量,使它们分别指向个文件,以实现对文件,的访问。,10.3 文件的翻开与关闭,一.文件的翻开(fopen函数),函数调用:,FILE *fp;,fpfopen文件名,使用文件方式;,文件名用 括起来,可以为文件所在的路径;,使用文件的方式“读还是“写等;,FILE *fp;,fpfopenfile1,r;,fpfopend:lxfile1.dat,r;,10.3 文件的翻开与关闭(续),文件使用方式含 义,“r (只读)为输入翻开一个文本文件,“w (只写)为输出翻开一个文本文件,“a (追加)向文本文件尾增加数据,“rb (只读)为输入翻开一个二进制文件,“wb (只写)为输出翻开一个二进制文件,ab“(追加)向二进制文件尾增加数据,r+“(读写)为读/写翻开一个文本文件,w+(读写)为读/写建立一个新的文本文件,a+(读写)为读/写翻开一个文本文件,rb+“(读写)为读/写翻开一个二进制文件,“wb+“(读写)为读/写建立一个新的二进制文件,“ab+(读写)为读/写翻开一个二进制文件,10.3 文件的翻开与关闭(续),二.文件的关闭(fclose函数),函数调用:,fclose文件指针;,函数功能:,使文件指针变量不指向该文件,,返回值:,关闭成功返回值为;否那么返回EOF(-1)。,10.4 文件的读写,一、字符输入输出函数(fputc(),fgetc(),1 fputc(字符,文件指针);,函数功能:,将字符写入成文件指针指向的文件中,返回值:,关闭成功返回字符;否那么返回EOF(-1)。,10.4 文件的读写(续),从键盘上输入一行字符,将其写入文件中,直到遇到#为止。,#include,main(),FILE*fp;,char ch,filename10;,scanf(%s,filename);,if(fp=fopen(filename,w)=NULL),printf(cannot open filen);,exit(0);,/*终止程序*/,getchar();,/*接收执行scanf语句时最后输入的回车符*/,while(ch=getchar()!=#),/*接收输入的第一个字符*/,fputc(ch,fp);,fclose(fp);,10.4 文件的读写,2 fgetc(文件指针);,函数功能:,从文件指针指向的文件中读入字符,返回值:,关闭成功返回读入的字符;否那么返回EOF(-1),10.4 文件的读写(续),fputc和fgetc函数使用举例:,例3从键盘输入一些字符,逐个把它们送到,磁盘上去,直到输入一个“为止。,输出文件内容到屏幕。,#include,main(),FILE*fp;,char ch,filename10;,scanf(%s,filename);,if(fp=fopen(filename,“r)=NULL),printf(cannot open filen);,exit(0);,/*终止程序*/,ch=fgetc(fp);,while(ch!=EOF),putchar(ch);,ch=fgetc(fp);,fclose(fp);,10.4 文件的读写,feof文件指针,函数来判断文件是否真的结束。如果是文件结束,函数feoffp的值为真;否那么为假。,10.4 文件的读写,一、字符串输入输出函数(fputs()和fgets(),fputs函数,函数调用:,fputs(str,fp);,函数功能:,将字符串str输出到fp所指向的文件中去。,返回值:,如果输出成功,那么返回值就是输出的字符;,如果输出失败,那么返回一个EOF。,10.4 文件的读写(续),fgets函数,函数调用:,fgetsstr,n,fp;,函数功能:,从指定的文件读入n-1字符放入str起始的地址中。,返回值:,读取字符串包含最后读到的n,自动在末尾加0。,如果遇到文件结束符(n或eof),返回null。,10.4 文件的读写(续),二、数据块对二进制文件读写函数(fread()和,fwrite()函数调用:,fread(buffer,size,count,fp);,fwrite(buffer,size,count,fp);,参数说明:,buffer:是一个指针。,对fread 来说,它是读入数据的存放地址。,对fwrite来说,是要输出数据的地址均指起始地址。,size:要读写的字节数。,count:要进行读写多少个size字节的数据项。,fp:文件型指针。,10.4 文件的读写(续),使用举例:,假设文件以二进制形式翻开:,fread(f,4,2,fp);,此函数从fp所指向的文件中读入2个4个字节的数,据,存储到数组f中。,10.4 文件的读写(续),使用举例:,假设有如下结构类型:,struct student_type,char name10;,int num;,int age;,char addr30;stud40;,可以用fread和fwrite来进行数据的操作:,for;,fread(,for;,,fwrite(,10.4 文件的读写(续),三、格式化读写函数(fprintf()和fscanf(),函数调用:,fprintf(文件指针,格式字符串,输出表列;,fscanf (文件指针,格式字符串,输入表列;,函数功能:,从磁盘文件中读入或输出字符。,例:,fprintf(fp,%d,%6.2f,i,t);,fscanf(fp,%d,%f,10.5 文件的定位,顺序读写和随机读写,顺序读写:,位置指针按字节位置顺序移动。,随机读写:,读写完上一个字符字节后,并不一定要读写其,后续的字符字节,而可以读些文件中任意位置,上所需要的字符字节。,10.5 文件的定位,fseek函数一般用于二进制文件,函数功能:,改变文件的位置指针。,函数调用形式:,fseek(文件类型指针,位移量,起始点),起始点:文件开头 SEEK_SET 0,文件当前位置 SEEK_CUR 1,文件末尾 SEEK_END 2,位移量:以起始点为基点,向前移动的字节数。一般,要求为long型。,10.5 文件的定位,fseek函数应用举例,fseek(fp,100L,;,将位置指针移到离文件头100个字节处。,fseek(fp,50L,;,将位置指针移到离当前位置50个字节处。,fseek(fp,50L,;,将位置指针从文件末尾处向后退5个字节。,10.5 文件的定位,ftell函数,函数作用:,得到流式文件中的当前位置,用相对于文件开头的位,移量来表示。,返回值:,返回当前位置,出错时返回-1L。,应用举例:,long i;,i=ftell(fp);,10.5 文件的定位,rewind(文件指针)函数,函数作用:,将文件指针重新定位于文件开始位置.,返回值:,无。,应用举例:,rewind(fp);,
展开阅读全文