C语言教程PPT版讲义谭浩强第十章.ppt

上传人:sccc 文档编号:5336604 上传时间:2023-06-27 格式:PPT 页数:18 大小:124.51KB
返回 下载 相关 举报
C语言教程PPT版讲义谭浩强第十章.ppt_第1页
第1页 / 共18页
C语言教程PPT版讲义谭浩强第十章.ppt_第2页
第2页 / 共18页
C语言教程PPT版讲义谭浩强第十章.ppt_第3页
第3页 / 共18页
C语言教程PPT版讲义谭浩强第十章.ppt_第4页
第4页 / 共18页
C语言教程PPT版讲义谭浩强第十章.ppt_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《C语言教程PPT版讲义谭浩强第十章.ppt》由会员分享,可在线阅读,更多相关《C语言教程PPT版讲义谭浩强第十章.ppt(18页珍藏版)》请在三一办公上搜索。

1、第十章 文件,10.1 C文件概述文件:存储在外部介质上数据的集合,是操作系统数据管理的单位,使用数据文件的目的1、数据文件的改动不引起程序的改动程序与数据分离2、不同程序可以访问同一数据文件中的数据数据共享3、能长期保存程序运行的中间数据或结果数据,文件分类按文件的逻辑结构:记录文件:由具有一定结构的记录组成(定长和不定长)流式文件:由一个个字符(字节)数据顺序组成按存储介质:普通文件:存储介质文件(磁盘、磁带等)设备文件:非存储介质(键盘、显示器、打印机等)按数据的组织形式:文本文件:ASCII文件,每个字节存放一个字符的ASCII码二进制文件:数据按其在内存中的存储形式原样存放,文本文件

2、特点:存储量大、速度慢、便于对字符操作,二进制文件特点:存储量小、速度快、便于存放中间结果,文件处理方法缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区,10.2 文件类型指针文件结构体FILE 缓冲文件系统为每个正使用的文件在内存开辟文件信息区文件信息用系统定义的名为FILE的结构体描述FILE定义在stdio.h中,typedef struct int _fd;/文件号 int _cleft;/缓冲区中剩下的字符数 int _mode;/文件操作方式 char*_next;/文件当前读写位置 char*_bu

3、ff;/文件缓冲区位置FILE;,文件类型指针指针变量说明:FILE*fp;用法:文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件文件关闭后,它的文件结构体被释放,10.3 文件的打开与关闭C文件操作用库函数实现,包含在stdio.h文件使用方式:打开文件-文件读/写-关闭文件系统自动打开和关闭三个标准文件:标准输入-键盘 stdin标准输出-显示器 stdout标准出错输出-显示器 stderr打开文件fopen函数原型:FILE*fopen(char*name,char*mode),功能:按指定方式打开文件返值:正常打开,为指向文件结构体的

4、指针;打开失败,为NULL,要打开的文件名,使用文件方式,例 文件打开与测试 FILE*fp;fp=fopen(“aa.c”,“w”);if(fp=NULL)printf(“File open error!n”);exit(0);,例 FILE*fp;fp=fopen(“c:fengyibkctest.dat”,”r”);,例 FILE*fp;char*filename=“c:fengyibkctest.dat”fp=fopen(filename,”r”);,文件关闭fclose作用:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针函数原型:int fclose(FILE*fp),功能:

5、关闭fp指向的文件返值:正常关闭为0;出错时,非0,文件打开时返回的文件类型指针,不关闭文件可能会丢失数据,10.4 文件的读写字符I/O:fputc与fgetcfputc函数原型:int fputc(int c,FILE*fp)功能:把一字节代码c写入fp指向的文件中返值:正常,返回c;出错,为EOF,fgetc函数原型:int fgetc(FILE*fp)功能:从fp指向的文件中读取一字节代码返值:正常,返回读到的代码值;读到文件尾或出错,为EOF,文件I/O与终端I/O#define putc(ch,fp)fputc(ch,fp)#define getc(fp)fgetc(fp)#def

6、ine putchar(c)fputc(c,stdout)#define getchar()fgetc(stdin),判断二进制文件是否结束 while(!feof(fp)c=fgetc(fp);.,例 从键盘输入字符,逐个 存到磁盘文件中,直到 输入#“为止,#include main()FILE*fp;char ch,*filename=“out.txt”;if(fp=fopen(filename,w)=NULL)printf(cannot open filen);exit(0);printf(Please input string:);ch=getchar();while(ch!=#)f

7、putc(ch,fp);putchar(ch);ch=getchar();fclose(fp);,例 读文本文件内容,并显示,#include main()FILE*fp;char ch,*filename=“out.txt”;if(fp=fopen(filename,”r)=NULL)printf(cannot open filen);exit(0);while(ch=fgetc(fp)!=EOF)putchar(ch);fclose(fp);,判断文本文件是否结束,feof函数原型:int feof(FILE*fp)功能:判断文件是否结束返值:文件结束,返回真(非0);文件未结束,返回0,

8、#include main()FILE*in,*out;char ch,infile10,outfile10;scanf(%s,infile);scanf(%s,outfile);if(in=fopen(infile,r)=NULL)printf(Cannot open infile.n);exit(0);if(out=fopen(outfile,w)=NULL)printf(Cannot open outfile.n);exit(0);while(!feof(in)fputc(fgetc(in),out);fclose(in);fclose(out);,数据块I/O:fread与fwrite

9、函数原型:,size_t fread(void*buffer,size_t size,size_t count,FILE*fp)size_t fwrite(void*buffer,size_t size,size_t count,FILE*fp),功能:读/写数据块返值:成功,返回读/写的块数;出错或文件尾,返回0说明:typedef unsigned size_t;buffer:指向要输入/输出数据块的首地址的指针size:每个要读/写的数据块的大小(字节数)count:要读/写的数据块的个数fp:要读/写的文件指针fread与fwrite 一般用于二进制文件的输入/输出,例 float f

10、2;FILE*fp;fp=fopen(“aa.dat”,“rb”);fread(f,4,2,fp);,for(i=0;i2;i+)fread(,例 struct student int num;char name20;char sex;int age;float score3;stud10;for(i=0;i10;i+)fread(,例 从键盘输入4个学生数据,把他们转存到磁盘文件中去,#include#define SIZE 2struct student_type char name10;int num;int age;char addr15;studSIZE;main()int i;fo

11、r(i=0;iSIZE;i+)scanf(%s%d%d%s,studi.name,void save()FILE*fp;int i;if(fp=fopen(d:fengyiexestu_dat,wb)=NULL)printf(cannot open filen);return;for(i=0;iSIZE;i+)if(fwrite(,void display()FILE*fp;int i;if(fp=fopen(d:fengyiexestu_dat,rb)=NULL)printf(cannot open filen);return;for(i=0;iSIZE;i+)fread(,格式化I/O:f

12、printf与fscanf函数原型:,int fprintf(FILE*fp,const char*format,argument,)int fscanf(FILE*fp,const char*format,address,),功能:按格式对文件进行I/O操作返值:成功,返回I/O的个数;出错或文件尾,返回EOF,例 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,例 从键盘按格式输入数据存到磁盘文件中去,#include main()char s80,

13、c80;int a,b;FILE*fp;if(fp=fopen(test,w)=NULL)puts(cant open file);exit();fscanf(stdin,%s%d,s,字符串I/O:fgets与fputs函数原型:,char*fgets(char*s,int n,FILE*fp)int fputs(char*s,FILE*fp),功能:从fp指向的文件读/写一个字符串返值:fgets正常时返回读取字符串的首地址;出错或文件尾,返回NULLfputs正常时返回写入的最后一个字符;出错为EOF,例 从键盘读入字符串存入文件,再从文件读回显示,fgets从fp所指文件读n-1个字符

14、送入s指向的内存区,并在最后加一个0(若读入n-1个字符前遇换行符或文件尾(EOF)即结束),fputs把s指向的字符串写入fp指向的文件,#includemain()FILE*fp;char string81;if(fp=fopen(file.txt,w)=NULL)printf(cannt open file);exit(0);while(strlen(gets(string)0)fputs(string,fp);fputs(n,fp);fclose(fp);if(fp=fopen(file.txt,r)=NULL)printf(cannt open file);exit(0);while

15、(fgets(string,81,fp)!=NULL)fputs(string,stdout);fclose(fp);,10.5 文件的定位几个概念文件位置指针-指向当前读写位置的指针读写方式顺序读写:位置指针按字节位置顺序移动,叫随机读写:位置指针按需要移动到任意位置,叫rewind函数函数原型:void rewind(FILE*fp)功能:重置文件位置指针到文件开头返值:无,例 对一个磁盘文件进行显示和复制两次操作,#include main()FILE*fp1,*fp2;fp1=fopen(d:fengyibkcch12_4.c,r);fp2=fopen(d:fengyibkcch12_

16、41.c,w);while(!feof(fp1)putchar(getc(fp1);rewind(fp1);while(!feof(fp1)putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);,fseek函数函数原型:int fseek(FILE*fp,long offset,int whence)功能:改变文件位置指针的位置返值:成功,返回0;失败,返回非0值,文件指针,位移量(以起始点为基点,移动的字节数)0 向后移动0 向前移动,起始点文件开始 SEEK_SET 0文件当前位置 SEEK_CUR 1文件末尾 SEEK_END 2,例 fseek(fp,

17、100L,0);fseek(fp,50L,1);fseek(fp,-10L,2);,ftell函数函数原型:long ftell(FILE*fp)功能:返回位置指针当前位置(用相对文件开头的位移量表示)返值:成功,返回当前位置指针位置;失败,返回-1L,,例 磁盘文件上有3个学生数据,要求读入第1,3学生数据并显示,#includestdio.h main()FILE*fp;char filename80;long length;gets(filename);fp=fopen(filename,rb);if(fp=NULL)printf(file not found!n);else fseek

18、(fp,0L,SEEK_END);length=ftell(fp);printf(Length of File is%1d bytesn,length);fclose(fp);,例 求文件长度(ch12_101.c),10.6 出错的检测ferror函数函数原型:int ferror(FILE*fp)功能:测试文件是否出现错误返值:未出错,0;出错,非0说明每次调用文件输入输出函数,均产生一个新的ferror函数值,所以应及时测试fopen打开文件时,ferror函数初值自动置为0,clearerr函数函数原型:void clearerr(FILE*fp)功能:使文件错误标志置为0返值:无说明

19、:出错后,错误标志一直保留,直到对同一文件调clearerr(fp)或rewind或任何其它一个输入输出函数,例 ferror()与clearerr()举例,#include int main(void)FILE*stream;stream=fopen(DUMMY.FIL,w);getc(stream);if(ferror(stream)printf(Error reading from DUMMY.FILn);clearerr(stream);if(!ferror(stream)printf(Error indicator cleared!);fclose(stream);return 0;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号