c语言第章利用文件保存数据刘佳PPT课件_第1页
c语言第章利用文件保存数据刘佳PPT课件_第2页
c语言第章利用文件保存数据刘佳PPT课件_第3页
c语言第章利用文件保存数据刘佳PPT课件_第4页
c语言第章利用文件保存数据刘佳PPT课件_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

C语言执行程序,输入数据,存在问题:运行完毕,结果消失!,运行结果能否长期保存呢?,使用文件!,文件无处不在,切不可视而不见,时而不理!,如:C语言源程序文件(.c或.cpp)、执行文件(.exe)、图片文件(.jpg),文件的基本概念,文件:存储在外部介质上数据的集合,是操作系统数据管理的单位。,文件命名规则:一个文件都必须有唯一的文件标识,包括:文件的路径、文件名主干和文件后缀(.扩展名),文件路径,文件名主干,文件后缀,d:cctempfile1.dat,通常:文件标识被称为文件名。后缀用来表示文件的性质,一般不超过3个字母;Doc,txt,dat,c,exe,ppt,bmp等等。,文件的类别,按文件的逻辑结构:记录文件:由具有一定结构的记录组成(定长和不定长),帮助记忆的都可以成为记录文件。流式文件:构成文件的基本单位为字符,长度为所包含字符的个数,又称字符流文件。按存储介质:普通文件:存储介质文件(磁盘、磁带等)设备文件:非存储介质(键盘、显示器、打印机等)按文件的内容程序文件。程序文件又可分为源文件、目标文件和可执行文件。数据文件。如各种图像文件、声音文件等。,文件的类别,根据文件的组织形式顺序存取文件;随机存取文件。按数据的组织形式:文本文件:ASCII文件,每个字节存放一个字符的ASCII码二进制文件:数据按其在内存中的存储形式原样存放,按数据分类的文件,是我们今天学习的内容,(1),(0),(0),(0),ASCII形式:一个字节代表一个字符,便于输出字符,二进制形式:一个字节不对应一个字符,不能直接输出字符形式,(10000),ASCII文件:每一个字节放一个字符的ASCII码。二进制文件:数据在内存中是以二进制形式存储的,不加转换地输出到外存。,(0),整数10000:分别占5字节和2字节,文件处理方法缓冲文件系统:系统自动为正在使用的文件开辟内存缓冲区,文件指针,文件结构体FILE缓冲文件系统为每个正使用的文件在内存开辟文件信息区,用来存放文件的相关信息(如名字、位置等)文件信息用系统定义的名为FILE的结构体描述,FILE定义在stdio.h中,程序中可直接用FILE类型定义变量。,typedefstructintlevel;/*fill/emptylevelofbuffer*/unsignedflags;/*Filestatusflags*/charfd;/*Filedescriptor*/unsignedcharhold;/*Ungetccharifnobuffer*/intbsize;/*Buffersize*/unsignedchar_FAR*buffer;/*Datatransferbuffer*/unsignedchar_FAR*curp;/*Currentactivepointer*/unsignedistemp;/*Temporaryfileindicator*/shorttoken;/*Usedforvaliditychecking*/FILE;/*ThisistheFILEobject*/,文件类型指针,直接用FILE类型名定义变量,每一个FILE类型变量对应一个文件的信息区,包含该文件的有关信息。FILEf;,定义了一个结构体变量f,可以用它来存放一个文件的有关信息,这些信息是建立文件时根据文件的性质由编译系统自动放入的。,一般不对FILE类型变量命名,而是设置一个指向FILE类型变量的指针变量,用指针变量来引用FILE类型变量。,文件类型指针定义指向文件型数据的指针变量:FILE*fp;,文件f1的文件信息区,fp1,文件f2的文件信息区,fp2,文件f3的文件信息区,fp3,FILE*fp1,*fp2,*fp3;/n个文件设置n个指针变量,文件的打开、读写和关闭,1、文件的打开与关闭,打开文件函数fopen,*fopen(文件名,使用文件方式);,文件使用方式:打开文件-文件读/写-关闭文件,调用方式:,功能:按指定方式打开文件返值:正常打开,为指向文件结构体的指针;打开失败,为NULL,用法:文件打开时,系统自动建立文件信息区和缓冲区,文件指针变量指向文件,文件关闭后,它的文件信息区和缓存区被释放,指针变量不指向文件。,打开文件方式mode由两类字符构成:一类字符表示打开文件的类型t-表示文本文件(text,默认方式),b-表示二进制文件(binary),另一类字符是操作类型r-表示从文件中读取数据(read),w-表示向文件写入数据(write),a-表示在文件尾追加数据(append),+-表示文件可读可写。,注意:1、最基本的是r,w,a三种方式,其后加b为二进制文件,+表示可读可写。2、文件指针变量的赋值操作由打开文件函数fopen()实现。3、exit(0)程序正常退出,必须包含#include头文件。exit(非零值);表示程序出错后退出,例:FILE*fp;fp=fopen(wang.txt,r);if(fp=NULL)printf(thefile:wang.txtnotfound!);exit(0);,关闭文件函数fclose,fclose(文件指针);fclose(fp);,调用方式:,功能:关闭fp指向的文件返值:正常关闭为0;出错时,-1作用:撤销文件信息区和缓冲区,使文件指针变量与文件“脱钩”。,不关闭文件可能会丢失数据,FILE*fp;fp=fopen(wang.txt,r+);if(fp=NULL)printf(thefile:wang.txtnotfound!);exit(0);/读取和加工数据fclose(fp);/关闭该文件,在顺序写时,先写入的数据存放在文件中前面,后写入的数据存放在文件中后面在顺序读时,先读文件中前面的数据,后读文件中后面的数据对顺序读写来说,对文件读写数据的顺序和数据在文件中的物理顺序是一致的,文件的顺序读写,2、文件的顺序读写,在语言中提供了多种文件读写的函数,这些函数主要包括:字符读写函数:fgetc和fputc字符串读写函数:fgets和fputs数据块读写函数:fread和fwrite格式化读写函数:fscanf和fprinf,(1)字符读写函数:fgetc和fputc,字符读函数fgetc,调用方式:,fgetc(fp);,功能:从fp指向的文件中,读入一个字符返值:成功,返回读到的字符;失败返回文件结束标志EOF,字符写函数fputc,调用方式:,fputc(ch,fp);,功能:将字符数据ch写到fp所指向的文件中去。返值:成功,返回输出的字符;失败,返回EOF,知识点回顾,字符数据的输入输出getchar()putchar(),字符输入函数:从终端输入一个字符,字符输出函数:向终端输出一个字符,注意:输入输出的是一个字符,调用getchar()函数,必须加上#include,【例10.1】从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个“#”为止解题思路:1、用getchar函数从键盘逐个输入字符。2、然后用fputc函数写到磁盘file1.dat文件。3、输入一个字符写一个字符,反复循环,直到满足条件。while()的条件为字符!=#,#include#includeintmain()FILE*fp;charch,filename10;printf(请输入所用的文件名:);scanf(%s,filename);,if(fp=fopen(filename,w)=NULL)/打开输出文件使fp指向此文件printf(无法打开此文件n);/如果打开时出错,就输出打不开的信息exit(0);/终止程序*/ch=getchar();/接收在执行scanf语句时最后输入的回车符printf(请输入一个字符串(以#结束):);ch=getchar();/接收从键盘输入的第一个字符while(ch!=#)/当输入#时结束循环fputc(ch,fp);/向磁盘文件输出一个字符putchar(ch);/将输出的字符显示在屏幕上ch=getchar();/再接收从键盘输入的一个字符fclose(fp);/关闭文件putchar(10);/输出换行,ascii为10exit,例10.2将一个磁盘文件中的信息复制到另一个磁盘文件中。今要求将上例建立的file1.dat文件中的内容复制到另一个磁盘文件file2.dat中。解题思路:处理此问题的算法是:从file1.dat文件中逐个读入字符,然后逐个输出到file2.dat中。fgetc()读取,fputc()输出,#include#includevoidmain()FILE*in,*out;charch,infile10,outfile10;printf(输入读入文件的名字:);scanf(%s,infile);file1.datprintf(输入输出文件的名字:);scanf(“%s”,outfile);file2.datif(in=fopen(infile,“r”)=NULL)printf(无法打开此文件n);exit(0);,if(out=fopen(outfile,w)=NULL)/打开输出文件printf(无法打开此文件n);exit(0);while(!feof(in)/如果未遇到输入文件的结束标志ch=fgetc(in);/从输入文件读入一个字符,暂放在变量ch中fputc(ch,out);/将ch写到输出文件中putchar(ch);/将ch显示在屏幕上putchar(10);/显示完全部字符后换行fclose(in);/关闭输入文件fclose(out);/关闭输出文件,按文本文件方式处理,改为rb和wb,则复制一个二进制文件,程序说明:,在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该位置指针指向文件的第一个字节。使用fgetc函数访问完一个字节后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc函数,读取多个字符。,文件读写位置指针与文件指针的区别:,文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。,(2)字符串读写函数:fgets和fputs,fgets,调用方式:,fgets(str,n,fp);,功能:从fp所指向的文件读取长度为(n-1)的字符串放到字符数组str中返值:读成功返回str地址,否则返回null。,从fp所指文件读n-1个字符送入str指向的内存区,并在最后加一个0(若读入n-1个字符前遇换行符或文件尾(EOF)即结束),fputs,调用方式:,fputs(str,fp);,功能:将存放在str中的字符串写到文件指针fp所指向的文件中去。返值:输出成功返回0,否则返回非0值。,不会将字符串结尾符0写入文件,也不会自动向文件写入换行符,如果需要写入一行文本,str字符串中必须包含n。,例10.3从键盘读入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。解题思路:为解决问题,可分为三个步骤:从键盘读入n个字符串,存放在一个二维字符数组中,每一个一维数组存放一个字符串;对字符数组中的n个字符串按字母顺序排序,排好序的字符串仍存放在字符数组中;将字符数组中的字符串顺序输出。,知识点回顾,字符串处理函数1、puts(字符数组):将一个字符串输出到终端。2、gets(字符数组):从终端输入一个字符串到字符数。3、strcmp(字符串1,字符串2):字符串比较字符串1=字符串2函数值为0字符串1字符串2函数值为一正整数字符串1字符串2函数值为一负整数4、strcpy(字符数组1,字符串2):将字符串2复制到字符数组1中。,#include#include#includeintmain()FILE*fp;charstr310,temp10;/str存放字符串二维数组,temp临时数组inti,j,k,n=3;printf(Enterstrings:n);/提示输入字符串*/for(i=0;in;i+)gets(stri);/输入字符串,for(i=0;i0)k=j;If(k!=i)strcpy(temp,stri);strcpy(stri,strk);strcpy(strk,temp);if(fp=fopen(D:CCstring.dat,w)=NULL)/打开磁盘文件printf(cantopenfile!n);exit(0);printf(nThenewsequence:n);for(i=0;in;i+)fputs(stri,fp);fputs(n,fp);printf(%sn,stri)/在屏幕上显示字符串,#include#includevoidmain()FILE*fp;charstr310;inti=0;if(fp=fopen(“D:CCstring.dat”,“r”)=NULL)printf(cantopenfile!n);exit(0);while(fgets(stri,10,fp)!=NULL)/若执行函数成功printf(%s,stri);i+;fclose(fp);,不用人为地输出n,为了验证输出到磁盘文件中的内容,可以编写出以下的程序,从该文件中读回字符串,并在屏幕上显示。,10.3.3文件的格式化读写,一般调用方式为:fprintf(文件指针,格式字符串,输出表列);fscanf(文件指针,格式字符串,输入表列);,pirntf、scanf数据格式化读写,fprintf、fscanf文件格式化读写,例如:fprintf(fp,%d,%6.2f,i,t);/将i和t按%d,%6.2f格式输出到fp文件fscanf(fp,%d,%f,/若文件中有3,4.5,则将3送入i,4.5送入t,10.3.4用二进制方式读写文件,一般调用形式为:fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);,buffer:是一个地址对fread来说,它是读入数据的存放地址对fwrite来说,是要输出数据的地址size:要读写的字节数count:要读写多少个数据项fp:FILE类型指针,例:fread(f,4,10,fp),读写数据块,从fp指向的文件读入10个4字节的数据放入f数组,如果有一个structstudent结构体类型structstudentcharname【10】;intnum;intage;charaddr【30】;stud【40】;,for(i=0;i40;i+)fread(i40;i+)fwrite(intnum;intage;charaddr15;studSIZE;,voidmain()inti;printf(“enterdataofstuden

温馨提示

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

评论

0/150

提交评论