第10章-文件(阅读)课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第10章-文件(阅读)课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 文件 阅读 课件
- 资源描述:
-
1、第10章 文件本章主要内容:l 文件、文件系统和文件指针的概念l 缓冲文件系统文件打开方式l 缓冲文件系统文件读写函数l 文件定位与随机读写l 非缓冲文件系统打开与读写函数10.1 文件、流和文件系统的概念文件、流和文件系统的概念 文件:存储指存储在外部介质上一组相关数据的集合,是操作系统数据管理的单位.使用数据文件的目的1、数据文件的改动不引起程序的改动程序与数据分离2、不同程序可以访问同一数据文件中的数据数据共享3、能长期保存程序运行的中间数据或结果数据C语言把文件看作一个字节序列,即由一个一个的字节组成,称为“流(stream)”,以字节为单位访问,输入输出的数据流的开始和结束仅受程序控
2、制而不受物理符号(如回车换行符)控制。文件分类按文件的逻辑结构:v记录文件:由具有一定结构的记录组成(定长和不定长)v流式文件:由一个个字符(字节)数据顺序组成按存储介质:v普通文件:存储介质文件(磁盘、磁带等)v设备文件:非存储介质(键盘、显示器、打印机等)按数据的组织形式:v文本文件:ASCII文件,每个字节存放一个字符的ASCII码v二进制文件:数据按其在内存中的存储形式原样存放如 int型数100000010011100010000内存存储形式0010011100010000二进制形式0011000100110000001100000011000000110000ASCII形式文本文件
3、特点:存储量大、速度慢、便于对字符操作二进制文件特点:存储量小、速度快、便于存放中间结果文件处理方法v缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区v非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:缓冲区指令区程序用户数据区磁盘非缓冲文件系统:10.2 文件类型指针文件结构体FILEv 缓冲文件系统为每个正使用的文件在内存开辟文件信息区v文件信息用系统定义的名为FILE的结构体描述vFILE定义在stdio.h中typedef struct int _fd;/文件号 int _cleft;/缓冲区
4、中剩下的字符数 int _mode;/文件操作方式 char *_next;/文件当前读写位置 char *_buff;/文件缓冲区位置FILE;文件类型指针v指针变量说明:FILE*fp1,*fp2*fp3;v用法:l文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件l文件关闭后,它的文件结构体被释放文件名文件使用方式文件类型指针C程序操作系统磁盘 系统自动地在内存区为每个正在使用的文件名开辟系统自动地在内存区为每个正在使用的文件名开辟一个缓冲区,为程序中的每一个文件使用,当执行一个缓冲区,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘
5、文件将数据先读入内存读文件的操作时,从磁盘文件将数据先读入内存“缓冲区缓冲区”,装满后再从内存,装满后再从内存“缓冲区缓冲区”依此读入依此读入接收的变量。执行写文件的操作时,先将数据写入接收的变量。执行写文件的操作时,先将数据写入内存内存“缓冲区缓冲区”,待内存,待内存“缓冲区缓冲区”装满后再写入装满后再写入文件。文件。10.3 缓冲文件系统10.3.1 文件的打开与关闭&C文件操作用库函数实现,包含在stdio.h&文件使用方式:打开文件-文件读/写-关闭文件&系统自动打开和关闭三个标准文件:v标准输入-键盘 stdinv标准输出-显示器 stdoutv标准出错输出-显示器 stderr打开
6、文件fopenv函数形式:fopen(文件名,使用文件方式文件名,使用文件方式)v功能:按指定方式打开文件v返值:正常打开,为指向文件结构体的指针;打开失败,为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”);“r+/rb+”(读写)
7、“a/ab”(追加)“w/wb”(只写)“r/rb”(只读)“w+/wb+”(读写)“a+/ab+”(读写)为输入打开一个文本/二进制文件为输出打开或建立一个文本/二进制文件为读/写打开一个文本/二进制文件为读/写建立一个文本/二进制文件为读/写打开或建立一个文本/二进制文件向文本/二进制文件尾追加数据文件使用方式含义文件关闭fclosev作用:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针v函数形式:fclose(文件指针)v功能:关闭文件指针fp指向的文件v返值:正常关闭为0;出错时,非0文件打开时返回的文件类型指针磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:fc
8、lose不关闭文件可能会丢失数据10.3.2 文件的读写字符读写函数:fputc与fgetcvfputcl函数形式:fputc(fp)l功能:把一字节代码c写入文件指针fp指向的文件中l返值:正常,返回c;出错,为EOFvfgetcl函数形式:fgetc(fp)l功能:从文件指针fp指向的文件中读取一字节代码l返值:正常,返回读到的代码值;读到文件尾或出错,为EOF 文件I/O与终端I/O#define putc(ch,fp)fputc(ch,fp)#define getc(fp)fgetc(fp)#define putchar(c)fputc(c,stdout)#define getchar
9、()fgetc(stdin)例 文件拷贝例 从键盘输入字符,逐个 存到磁盘文件中,直到 输入#“为止#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!=#)fputc(ch,fp);putchar(ch);ch=getchar();fclose(fp);例 读文本文件内容,并显示#include main()FILE*
10、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);判断文本文件是否结束vfeofl函数形式:feof(fp)l功能:判断文件是否结束l返值:文件结束,返回真(非0);文件未结束,返回0#include main()FILE*in,*out;char ch,infile10,outfile10;scanf(%s,infile);scanf(%s,outfile);i
11、f(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);字符串读写函数:fgets与fputsv函数形式:fgets(str,n,fp)fputs(str,fp)v功能:从fp指向的文件读/写一个字符串v返值:lfgets正常时返回读取字符串的首地址;出错或文件尾,返回NULL
12、lfputs正常时返回写入的最后一个字符;出错为EOF例 从键盘读入字符串存入文件,再从文件读回显示fgets从fp所指文件读n-1个字符送入s指向的内存区,并在最后加一个0(若读入n-1个字符前遇换行符或文件尾(EOF)即结束)fputs把str指向的字符串写入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(
13、fp);if(fp=fopen(file.txt,r)=NULL)printf(cannt open file);exit(0);while(fgets(string,81,fp)!=NULL)fputs(string,stdout);fclose(fp);数据块读写函数:fread与fwritev函数形式:fread(buffer,size,count,fp)fwrite(buffer,size,count,fp)v功能:读/写数据块v返值:成功,返回读/写的块数;出错或文件尾,返回0v格式说明:lbuffer:指向要输入/输出数据块的首地址的指针lsize:每个要读/写的数据块的大小(字节
14、数)lcount:要读/写的数据块的个数lfp:要读/写的文件指针lfread与fwrite 一般用于二进制文件的输入/输出例 float f2;FILE *fp;fp=fopen(“aa.dat”,“rb”);fread(f,4,2,fp);for(i=0;i2;i+)fread(&fi,4,1,fp);例 struct student int num;char name20;char sex;int age;float score3;stud10;for(i=0;i10;i+)fread(&studi,sizeof(struct student),1,fp);例 从键盘输入4个学生数据,把
15、他们转存到磁盘文件中去#include#define SIZE 2struct student_type char name10;int num;int age;char addr15;studSIZE;main()int i;for(i=0;iSIZE;i+)scanf(%s%d%d%s,studi.name,&studi.num,&studi.age,studi.addr);save();display();void save()FILE*fp;int i;if(fp=fopen(d:fengyiexestu_dat,wb)=NULL)printf(cannot open filen);r
展开阅读全文