C语言程序设计9文件.ppt
- 文档编号:18726198
- 上传时间:2023-10-20
- 格式:PPT
- 页数:22
- 大小:758.50KB
C语言程序设计9文件.ppt
《C语言程序设计9文件.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计9文件.ppt(22页珍藏版)》请在冰点文库上搜索。
第八章文件,8.1文件的概念,文件概念:
文件是一组存储在外部设备上的数据的集合。
外设(如键盘)也可以以文件的形式进行处理,称为设备文件。
文件的优点:
保存和交换数据。
保存大容量数据。
文件的分类:
数据表示方式:
二进制文件。
文本文件(ASCII)文件。
读写方式:
顺序读写文件(流式)。
随机读写文件。
处理方法:
缓冲文件。
非缓冲文件。
Device,内存,Buffer,匹配主机速度,数据转换。
8.2文件的操作过程与文件指针,文件的操作过程,打开文件,建立一个文件和流的对应关系。
在内存中建立一个保存文件信息的结构变量。
读写文件,关闭文件,释放文件所占的资源。
文件指针,在缓冲文件系统中,每个被使用的文件的信息(如文件名、位置、类型等)都保存在一个特殊定义的结构类型的变量中。
该结构用户定义名为:
FILE,可以定义一个指向FILE类型的结构指针,打开文件是让该指针指向文件对应的结构变量,通过该指针对文件进行操作。
FILE*fp;,8.3文件的打开与关闭,文件的打开fopen()函数,fopen函数的原型在stdio.h文件中说明,该函数的作用是打开缓冲文件。
使用方法:
FILE*fp;fp=fopen(filename,mode);,打开文件的文件名或设备名。
文件的读写方式。
文件信息结构的指针。
fp=fopen(“a:
wang.dat”,”w+”);,说明:
如果fopen失败,则函数返回空指针NULL;,当文件打开错误时,程序不应继续执行,一般以如下方式打开文件:
if(fp=fopen(filename,mode)=NULL)printf(“FileOpenError!
n”);exit
(1);,文件的读写方式说明:
文件的关闭fclose函数,文件使用完必须关闭,关闭文件的目的是:
保证文件的数据不丢失,将buffer的数据回写文件。
释放buffer。
关闭文件函数的使用:
fclose(文件指针);,FILE*fp;fp=fopen(“a:
d.dat”,”w+”);/*文件的读写*/fclose(fp);,说明:
如果关闭正确fclose返回0;关闭失败fclose返回非0。
文件读写的方式,文件按读写方式可以分为:
顺序读写随机读写,顺序读写:
顺序向后读写。
随机读写:
给定位置读写。
8.4文件的读写,文件的读写是由定义在stdio.h中的一组函数的集合所实现的。
fputc函数和fgetc函数,fputc函数,使用方法:
fputc(ch,fp);,含义:
将字符ch写入文件指针对应的文件的当前位置。
返回值:
写入正确返回ch的值;失败返回EOF(在stdio.h中定义为-1)。
fgetc函数,使用方法:
ch=fgetc(fp);/*ch为字符型变量。
*/,含义:
从文件指针fp对应的可读文件的当前位置读一个字符返回赋值给ch。
feof函数,使用方法:
i=feof(fp);,含义:
判断文件是否结束。
返回值:
1代表文件结束;0代表文件未结束。
#includevoidmain(intargc,char*argv)FILE*in,*out;if(argc!
=3)printf(“Commandformaterror!
n”);exit(0);if(in=fopen(argv1,“r”)=NULL)printf(“cannotopentheinfilen”);exit(0);if(out=fopen(argv2,“w”)=NULL)printf(“cannotopentheoutfilen”);exit(0);while(!
feof(in)fputc(fgetc(in),out);fclose(in);fclose(out);,打开源文件,打开目标文件,当源文件未结束时,读一个字符写入目标文件。
关闭文件,chp8ex1,举例:
将一个磁盘文件中的内容复制到另一个文件中。
文件的字符串的输入和输出函数,字符串输入函数,使用方法:
fgets(str,n,fp);,含义:
从fp所对应的文件的当前位置读n-1个字符到str所指向的内存单元。
并在结束处加0表示字符串结束。
三种情况可以使输入结束:
输入完n-1个字符;输入时遇到n;输入时遇到文件结束标志。
字符串输出函数,使用方法:
fputs(str,fp);,含义:
将str指向的字符串,输出到fp所对应的文件中,并忽略输出字符串结束标志0。
#include#include#defineSIZE256voidmain(intargc,char*argc)charbuffSIZE;FILE*fpr,*fpw;fpw=stdprn;if(fpr=fopen(argc1,“r”)=NULL)printf(“Fileopenerror!
n”);exit(0);while(fgets(buff,SIZE,fpr)!
=NULL)fputs(buff,fpw);fclose(fpr);,打开文件,输入。
输出到打印机。
文件指针执行设备:
stdprn打印机;stdaux串口;stdin、stdout。
举例:
从文件中输入字符串,并打印其内容。
文件的格式化输入和输出函数,fp文件指针format,格式说明字符串,取%d、%x、%f、%c等;说明输入转化的格式。
&arg1&argn,接收输入变量的地址列表。
格式化输入函数fscanf,使用方法:
fscanf(fp,format,含义:
从fp对应的文件的当前位置,顺序读入一个字符序列,按format说明的格式和类型进行转换并存放到对应变量单元。
#include#includevoidmain(void)chars80;inta;FILE*fp;if(fp=fopen(“text.txt”,“r”)=NULL)printf(“cannotopenfile“);exit(0);fscanf(fp,“%s%d“,s,chp8ex2,打开文件,输入数据。
例:
从text.txt中读字符串和一个十进制数,输出到显示器。
fp文件指针;format,格式说明字符串,取%d、%x、%f、%c等;说明输出转化的格式。
arg1argn,输出量列表。
使用方法:
fprintf(fp,format,arg1,argn);,含义:
以指定的格式(format),将arg1argn的值,转换为字符序列,写入fp文件的当前位置。
FILE*fp;fp=fopen(“s.dat”,”w”);fprint(fp,”%d%c”,123,c);fclose(fp);,格式化输出函数fprintf,文件的数据块输入输出函数,buf(空类型指针)接收数据的地址;size(整型)一次读取数据的字节数;count(整型)读取次数;fp对应输入文件的文件指针。
fread()函数,使用方法:
fread(buf,size,count,fp);,含义:
从fp指向的文件的当前位置,每次读取size个字节,共读count次读入数据,存放到buf指向的内存处。
返回值:
调用正确,返回输入的项数;,调用错误,返回-1(EOF)。
FILE*fp;charstr80;fp=fopen(“s.dat”,”r”);fread(str,20,3,fp);,fwrite函数,buf(空类型指针)数据的地址;size(整型)一次输出数据的字节数;count(整型)输出次数;fp对应输出文件的文件指针。
使用方法:
fwrite(buf,size,count,fp);,含义:
从buf开始,分count次,每次size个字节,向fp对应文件的当前位置写数据。
返回值:
调用正确时,返回count。
调用错误时,返回-1(EOF)。
举例:
#include#includevoidmain(void)FILE*stream;charmsg=“Thisisatest“,buf20;stream=fopen(TEST1.DAT,w+);fwrite(msg,strlen(msg)+1,1,stream);fseek(stream,SEEK_SET,0);fread(buf,strlen(msg)+1,1,stream);printf(%sn,buf);fclose(stream);,打开文件。
写数据到文件。
重新定位到文件头。
chp8ex3,8.5文件的定位操作,以上的所有文件的读写都是顺序的,完成一次读写操作后,文件的记录位置自动指向下一位置,因而称为顺序的流式文件。
用户想使用任意的读写位置,可以通过定位函数实现。
取文件当前位置ftell函数,longn;n=ftell(fp);,含义:
取文件的当前的读写位置(从文件头到当前的字节数)。
返回值(long):
调用正确,返回当前位置域文件都相差的字节数;,调用错误,返回-1L。
改变文件指针的当前位置fseek函数,fp文件指针;offset(longint),以from为起点移动的偏移量;from为移动的起始位置。
使用方法:
fseek(fp,offset,from);,from在stdio.h中定义了如下常量:
fseek(fp,50L,SEEK_SET),fp对应文件的当前位置移到文件头50字节处。
置文件于开头位置rewind()函数,使用方法:
rewind(fp);,#include#include#defineN30structstudentcharname10;intno;intscore;studN;voidmain(void)inti;FILE*fp;fp=fopen(“std.lst”,“rb”);for(i=0;iN;i+)fseek(fp,i*sizeof(structstudent),0);fread(,举例:
已知30个学生的一门课的分数,打印学号为单号学生的分数。
8.6文件的错误检测,文件读写错误检测函数ferror。
使用方法:
ferror(fp);,含义:
检测文件读写错误。
如果返回值为0,表示无错误。
如果返回值非0,表示有错误。
该标志一旦置位,必须通过清除函数清除!
清除文件错误标志函数clearerr,使用方法:
clearerr(fp);,含义:
清除文件读写错误标志。
举例:
#includevoidmain(void)FILE*stream;stream=fopen(DUMMY.FIL,w);(void)getc(stream);if(ferror(stream)printf(ErrorreadingfromDUMMY.FILn);clearerr(stream);fclose(stream);,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 文件