北航c语言程序设计复习经典版

上传人:第*** 文档编号:57904963 上传时间:2018-10-25 格式:PPT 页数:29 大小:137.50KB
返回 下载 相关 举报
北航c语言程序设计复习经典版_第1页
第1页 / 共29页
北航c语言程序设计复习经典版_第2页
第2页 / 共29页
北航c语言程序设计复习经典版_第3页
第3页 / 共29页
北航c语言程序设计复习经典版_第4页
第4页 / 共29页
北航c语言程序设计复习经典版_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《北航c语言程序设计复习经典版》由会员分享,可在线阅读,更多相关《北航c语言程序设计复习经典版(29页珍藏版)》请在金锄头文库上搜索。

1、第十章 文件,10.1 概述,文件:存储在外部介质上数据的集合,是操作系统数据管理的单位使用数据文件的目的 数据文件的改动不引起程序的改动程序与数据分离 不同程序可以访问同一数据文件中的数据数据共享 能长期保存程序运行的中间数据或结果数据,概述,C语言把文件看作一个字节序列,即由一连串的字节组成,称为“流(stream)” ,以字节为单位访问,没有记录的界限,文件分类按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成按存储介质: 普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(键盘、显示器、打印机等)按数据的组织形式

2、: 文本文件: ASCII文件,每个字节存放一个字符的ASCII码 二进制文件:数据按其在内存中的存储形式原样存放,如 int型数10000,内存存储形式,二进制形式,ASCII形式,文本文件特点: 存储量大、速度慢、便于对字符操作,二进制文件特点: 存储量小、速度快、便于存放中间结果,文件处理方法 缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区 非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区,10.2 文件类型指针,要调用一个文件,需要有以下的信息文件当前的读写位置与该文件对应的内存缓冲区的地址缓冲区中未被处理的字符串文件操作方式等,缓冲文件系统为每个正

3、使用的文件在内存开辟文件信息区 文件信息用系统定义的名为FILE的结构体描述 FILE定义在stdio.h中,typedef struct int _fd; /* 文件号 */ int _cleft; /* 缓冲区中剩下的字节数 */ int _mode; /* 文件操作模式 */ char * _nextc; /* 下一个字节的位置 */ char * _buff; /*文件缓冲区位置 */ FILE;,文件类型指针,文件类型指针 指针变量说明: FILE *fp; 用法: 文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件 文件关闭后,它的文

4、件结构体被释放,10.3 文件的打开与关闭,文件操作用库函数实现,包含在stdio.h 文件使用方式:打开文件文件读/写关闭文件 系统自动打开和关闭三个标准文件: 标准输入-键盘 stdin 标准输出-显示器 stdout 标准出错输出-显示器 stderr,文件的打开,FILE * fopen(const char *filename,const char *mode);,文件名(可以包含逻辑驱动器、 路径、文件名、扩展名),打开方式,返回值,功能:按指定方式从磁盘上查找指定的文件或创建一个新文件。 返值:正常打开,为指向文件结构体的指针;打开失败,为NULL,例:FILE *fp; fp

5、= fopen(“file1“,“r“); 如果成功打开,返回一个指向被打开文件的文件信息区的起始地址;如果打开失败,返回一个NULL指针。,文件的打开,说明:打开文件的方式,必须与文件的属性兼容。例如,不能以“w”和“a”方式打开具有“只读”属性的文件。但可以以任何方式打开“隐藏”属性文件。 DOS/Windows中,无“只写”文件属性,一个文件可写,同时意味着可读。 用带“r”的方式(“r”、“rb”、“r+”、“rb+”)打开文件时,若文件不存在,则返回NULL指针。一般用以下方式检查是否成功打开: FILE *fp; if (fp=fopen(“file1“, “r“) = =NULL

6、 ) printf(“cannot open this filen“); exit(0); /* exit(0)是程序返回操作系统*/,文件的打开,在Turbo C2.0中,用带“a”或带“w”的方式打开文件时,若文件不存在,则创建该文件。但fopen()函数仍可能因为磁盘写保护或目录满而失败。在Turbo C2.0中,用带“a“或带“w“的方式打开文件时,若文件已存在,“a“方式在原文件后追加数据,“w“方式把原文件删除、并重新创建一个相同名字的文件。,文件的关闭,int fclose(FILE *fp),文件打开时返回的文件类型指针,功能:关闭fp指向的文件,使文件指针变量与文件“脱钩”,

7、释放文件结构体和文件指针 返值:正常关闭为0;出错时,非0,不关闭文件可能会丢失数据,10.4 文件的读写,fputc的函数原型为:,int fputc(char ch, FILE *fp),作用:将ch中的字符输出到fp所指向的文件中,通常用于往文本文件中写入一个字符,返回值:输出成功则返回所输出的字符,失败则返回EOF,fgetc的函数原型为:,int fgetc(FILE *fp),作用:从fp所指向的文件中读入一个字符,返回值:返回所读的字符,如发生错误或读到文件结束符失败则返回EOF,例 从键盘输入字符,逐个存到磁盘文件中,直到输入#“为止,#include main() FILE

8、*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 *fp;char ch,*filename=“out.txt”;if(fp=fopen(filename,”r“)

9、=NULL) printf(“cannot open filen“);exit(0);while(ch=fgetc(fp)!=EOF)putchar(ch);fclose(fp); ,判断文本文件是否结束,判断二进制文件是否结束while(!feof(fp) c=fgetc(fp);,feof 函数原型: int feof(FILE *fp) 功能:判断文件是否结束 返值:文件结束,返回真(非0);文件未结束,返回0,#include main() FILE *in, *out;char ch,infile10,outfile10;scanf(“%s“,infile);scanf(“%s“,o

10、utfile);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); ,fwrite的函数原型为:,unsigned fwrite(void *buffer, unsigned size,unsigned count, FIL

11、E *fp),作用:将buffer所指向的内存单元开始的内存区中的长度为size的count个数据项写入fp所指向的文件中,返回值:调用成功则返回实际输入的数据项,即count的值,fwrite函数主要用于二进制文件的写操作,可以将一个数据块(即一组数据)写到文件中。,fread的函数原型为:,unsigned fread(void *buffer, unsigned size,unsigned count, FILE *fp),作用:从fp所指向的文件中将读出每项长度为size的count个数据项,存放到buffer所指向的内存单元开始的存储区中,返回值:返回实际所读出的数据项,即count

12、的值,fread函数主要用于二进制文件的读操作,从文件中读出一组数据。,如果文件以二进制形式打开,用fread和fwrite可以读写任何类型的信息。,、若f 为float型数组,共10个元素:,fread(f, 4, 10, fp);,fread(f, sizeof(float), 10, fp);,fread(f, 8, 5, fp);,fwrite(f, sizeof(float), 10, fp);,、若有结构体类型:,struct student long num;char name;float score3; stu30;,for (i=0; i30; i+)fwrite(,for

13、(i=0; i30; i+)fread(,说明:,、由fputc函数建立的文件,通常由fgetc函数读取,它们的操作对象均为字符,所以称为字符读写函数;,、由fwrite函数建立的文件,通常由fread函数读取,它们以数据块为单位进行读写,所以称为块读写函数;,关于文件追加的含义:,追加数据时,文件中的原有数据仍然存在,新写入的数据写到原文件数据之后。,打开文件时,系统内部存在一个位置指针,指出对数据操作的位置。,用“r“、“w“、“rb“、“wb“打开文件时,位置指针指向文件开始处;读写时总是文件的第一个数据;,用“a“、“ab“打开文件时,位置指针则指向整个文件最后一个数据之后;写数据时追

14、加到了原有数据之后。,例 float f2;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 2 struct student_type char name10;int num;int age;char addr15;

15、 studSIZE;main() int i;for(i=0;iSIZE;i+)scanf(“%s%d%d%s“,studi.name, ,void save() FILE *fp;int i;if(fp=fopen(“stu_dat“,“wb“)=NULL) printf(“cannot open filen“);return;for(i=0;iSIZE;i+)if(fwrite( ,格式化I/O:fprintf与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,例 从键盘按格式输入数据存到磁盘文件中去,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号