二级C语言程序设计第11章文件.ppt
第11章 文件,11.1 文件的基本概念,1文件的概念,文件是存储在外部存储介质上的信息的集合,每个文件用惟一的文件名(主文件名.后缀)来标识,计算机按名对文件进行读、写等有关操作。,第11章 文件,11.1 文件的基本概念,1文件的概念,2文件的分类,(1)按数据的存储形式分类:文本文件、二进制文件,文本文件:是将构成文件的每个字符用一个 ASCII码来存储,一个字符占一个字节。例1:采用文本文件方式存储整数238,存储形式如下:,第11章 文件,11.1 文件的基本概念,1文件的概念,2文件的分类,(1)按数据的存储形式分类:文本文件、二进制文件,二进制文件:是按数据在内存中的二进制码存储形式来存储。例2:采用二进制文件方式存储整数238,存储形式如下:,整数238的二进制码(占2个字节),第11章 文件,11.1 文件的基本概念,1文件的概念,2文件的分类,(1)按数据的存储形式分类:文本文件、二进制文件,(2)按文件的处理方式分类:缓冲文件系统、非缓冲文件系统,第11章 文件,11.1 文件的基本概念,1文件的概念,2文件的分类,3文件的存取方式,顺序存取:对文件的读写操作只能按顺序进行。即每当“打开”这类文件进行读或写操作时,总是从文件的开头开始,从头到尾顺序进行读或写,要读或写第n个字节时,先要读或写前n-1个字节。随机存取:对文件的读写操作可按指定的字节号进行。即可以通过调用库函数去指定开始读或写的字节号,然后直接对该位置上的数据进行读或写操作。,第11章 文件,11.1 文件的基本概念,1文件的概念,2文件的分类,3文件的存取方式,4文件类型的指针,文件指针的定义形式如下:FILE*标识符;其中,标识符是一个指向FILE类型结构体的指针变量名,第11章 文件,11.1 文件的基本概念,11.2 文件的基本操作,文件操作一般有如下四个基本步骤:(1)定义文件指针。(2)打开文件。(3)对文件进行读或写操作。(4)关闭文件。,第11章 文件,11.1 文件的基本概念,11.2 文件的基本操作,11.2.1 文件的打开与关闭,1文件的打开,调用库函数fopen()的一般形式为:FILE*标识符;标识符=fopen(文件名,文件使用方式);例如:FILE*fp;fp=fopen(DT.dat,r);,第11章 文件,第11章 文件,11.1 文件的基本概念,11.2 文件的基本操作,11.2.1 文件的打开与关闭,1文件的打开,2文件的关闭,调用库函数fclose()的一般形式为:fclose(标识符);例如:FILE*fp;fp=fopen(DT.dat,r);fclose(fp);,第11章 文件,11.1 文件的基本概念,11.2 文件的基本操作,11.2.1 文件的打开与关闭,11.2.2 文件的读写,1字符读写函数,第11章 文件,函数调用格式:ch=fgetc(fp);其中,ch是字符型变量,fp是文件指针。函数功能:从文件指针fp指向的文件当前位置(位置指针)读出一个字符,然后文件位置指针自动后移,指向文件中的下一个字符,返回值为读入的字符。若遇到文件结束符,则返回结束符EOF(值为-1)。文件指针fp指向的文件必须已经以读的方式打开。,(1)字符输入函数fgetc()。,第11章 文件,(1)字符输入函数fgetc()。,例11.1 将磁盘文件myfile.dat的信息读出并显示到屏幕上(假设文件已经存在)。#include main()FILE*fp;char ch;if(fp=fopen(myfile.dat,r)=NULL)printf(n File not exist!);exit(0);while(ch=fgetc(fp)!=EOF)putchar(ch);fclose(fp);,第11章 文件,(1)字符输入函数fgetc()。,(2)字符输出函数fputc()。,函数调用格式:fputc(ch,fp);其中,ch是字符型数据,fp是文件指针。函数功能:把一个字符ch写到文件指针fp指向的磁盘文件上去。输出成功,返回输出的字符;输出失败,返回一个EOF(值为-1)。,第11章 文件,(1)字符输入函数fgetc()。,(2)字符输出函数fputc()。,例11.2 从键盘输入一串字符存到一个磁盘文件myfile.dat中,以“#”结束。#include main()FILE*fp;char ch;if(fp=fopen(myfile.dat,w)=NULL)printf(n File cannot open!);exit(0);while(ch=getchar()!=#)fputc(ch,fp);fclose(fp);,第11章 文件,11.1 文件的基本概念,11.2 文件的基本操作,11.2.1 文件的打开与关闭,11.2.2 文件的读写,1字符读写函数,2字符串读写函数,第11章 文件,(1)字符串输入函数fgets()。,函数调用格式:fgets(str,n,fp);其中,str是字符型指针或字符型数组,n是整型数据,fp是文件指针。函数功能:从文件指针fp指向的文件中读取n-1个字符,把它送到由str指向的字符数组中。字符数组的长度应大于n,可存放n-1个字符,字符数组的最后一个元素为0。若在读入n-1个字符前遇到换行符n或文件结束符号EOF,立即结束读入操作。,第11章 文件,(1)字符串输入函数fgets()。,例11.3 利用字符串输入函数fgets()将磁盘文件myfile.dat的信息读出并显示到屏幕上(假设文件已经存在)。#includemain()FILE*fp;char str81;if(fp=fopen(myfile.dat,r)=NULL)printf(Cannot open file!);exit(0);while(fgets(str,81,fp)!=NULL)puts(str);fclose(fp);,第11章 文件,(1)字符串输入函数fgets()。,(2)字符串输出函数fputs()。,函数调用格式:fputs(str,fp);其中,str是字符型指针或字符型数组或字符串常量,fp是文件指针。函数功能:把字符串str写入由文件指针 fp指向的文件中。输出成功,返回0;输出失败,返回非0。,第11章 文件,(1)字符串输入函数fgets()。,(2)字符串输出函数fputs()。,例11.4 从键盘输入若干行字符存到一个磁盘文件myfile.dat中。#include main()FILE*fp;char str 81;if(fp=fopen(myfile.dat,w)=NULL)printf(File cannot open!);exit(0);while(fgets(str,81,stdin)!=NULL)fputs(str,fp);fclose(fp);,第11章 文件,11.1 文件的基本概念,11.2 文件的基本操作,11.2.1 文件的打开与关闭,11.2.2 文件的读写,1字符读写函数,2字符串读写函数,3格式化读写函数,第11章 文件,(1)格式化输入函数fscanf(),函数调用格式:fscanf(文件指针,格式字符串,输入表列);函数功能:从“文件指针”指定的文件中按“格式字符串”指定格式输入数据给“输入表列”给出的变量。返回实际被赋值参数的个数。,第11章 文件,(1)格式化输入函数fscanf(),例11.5 按指定的格式,从文件student.dat中将学生信息读出并显示在屏幕上。#includemain()FILE*fp;int i;if(fp=fopen(student.dat,r)=NULL)printf(Cannot open file!n);exit(0);printf(output data:n);for(i=0;i5;i+)fscanf(fp,%d%s%c%d%s,struct student int num;char name20;char sex;int age;char addr30;a5;,第11章 文件,(1)格式化输入函数fscanf(),(2)格式化输出函数fprintf(),函数调用格式:fprintf(文件指针,格式字符串,输出表列);函数功能:按“格式字符串”指定格式将“输出表列”给出的数据项输出到“文件指针”指定的文件中。返回实际输出数据的个数。,第11章 文件,(1)格式化输入函数fscanf(),(2)格式化输出函数fprintf(),例11.6 按指定的格式,将学生信息写入到文件student.dat中。#includemain()FILE*fp;int i,;if(fp=fopen(student.dat,w)=NULL)printf(Cannot open file!n);exit(0);printf(input data:n);for(i=0;i5;i+)scanf(%d%s%c%d%s,struct student int num;char name20;char sex;int age;char addr30;a5;,第11章 文件,11.1 文件的基本概念,11.2 文件的基本操作,11.2.1 文件的打开与关闭,11.2.2 文件的读写,1字符读写函数,2字符串读写函数,3格式化读写函数,4数据块读写函数,第11章 文件,(1)数据块输入函数fread(),函数调用格式:fread(buffer,size,count,fp);其中,buffer是一个指针,指向存放数据块(数组)的首地址,size是输入数据项的字节长度,count是输入数据项的个数,fp是文件指针。函数功能:从文件指针fp指定的文件中输入count个字节为size的数据,存放在buffer指向的数组中。,第11章 文件,(1)数据块输入函数fread(),例11.7 利用数据块输入函数fread()完成例11.5。#includemain()FILE*fp;int i;int size;size=sizeof(struct student);if(fp=fopen(student.dat,r)=NULL)printf(Cannot open file!n);exit(0);printf(output data:n);fread(a,size,5,fp);for(i=0;i5;i+,qq+)printf(%d%s%c%d%sn,ai.num,ai.name,ai.sex,ai.age,ai.addr);fclose(fp);,struct student int num;char name20;char sex;int age;char addr30;a5;,第11章 文件,(1)数据块输入函数fread(),(2)数据块输出函数fwrite(),函数调用格式:fwrite(buffer,size,count,fp);其中,buffer是一个指针,指向存放数据块(数组)的首地址,size是输出数据项的字节长度,count是输出数据项的个数,fp是文件指针。函数功能:从buffer指针所指存储单元开始,将count个字节为size的数据输出到文件指针fp指定的文件中。,第11章 文件,(1)数据块输入函数fread(),struct student int num;char name20;char sex;int age;char addr30;a5;,例11.8 利用数据块输入函数fwrite()完成例11.6。#includemain()FILE*fp;int i;int size;size=sizeof(struct student);if(fp=fopen(student.dat,w)=NULL)printf(Cannot open file!n);exit(0);printf(input data:n);for(i=0;i5;i+)scanf(%d%s%c%d%s,(2)数据块输出函数fwrite(),第11章 文件,11.1 文件的基本概念,11.2 文件的基本操作,11.2.1 文件的打开与关闭,11.2.2 文件的读写,1字符读写函数,2字符串读写函数,3格式化读写函数,4数据块读写函数,5判断文件是否结束函数,第11章 文件,函数调用格式:feof(fp);其中,fp是文件指针。函数功能:判断文件指针fp所指文件是否结束,如果遇到文件结束,函数返回值为1,否则,函数返回值为0。,第11章 文件,例11.9 利用feof(fp)函数改写例11.1:将磁盘文件myfile.dat的信息读出并显示到屏幕上(假设文件已经存在)。#include main()FILE*fp;char ch;if(fp=fopen(myfile.dat,r)=NULL)printf(n File not exist!);exit(0);ch=fgetc(fp);while(!feof(fp)putchar(ch);ch=fgetc(fp);fclose(fp);,第11章 文件,11.1 文件的基本概念,11.2 文件的基本操作,11.2.1 文件的打开与关闭,11.2.2 文件的读写,1字符读写函数,2字符串读写函数,3格式化读写函数,4数据块读写函数,5判断文件是否结束函数,11.2.3 文件的定位,第11章 文件,1文件指针重定位函数rewind(),函数调用格式:rewind(fp);其中:fp是文件指针。函数功能:使文件指针fp指定的文件的位置指针指向文件的开始位置(文件头)。,第11章 文件,1文件指针重定位函数rewind(),2移动位置指针函数fseek(),函数调用格式:fseek(文件指针,位移量,起始位置);函数功能:使“文件指针”指定的文件的位置指针从“起始位置”为基点,向前或向后移动“位移量”个字节数。说明:(1)起始位置分别有0(文件开始)、1(文件当前位置)和2(文件末尾)三种情况。(2)位移量可正可负。位移量为正数时,位置指针向后移动,位移量为负数时,位置指针向前移动。例如:fseek(fp,20,0);fseek(fp,20,1);fseek(fp,-20,2);,第11章 文件,1文件指针重定位函数rewind(),2移动位置指针函数fseek(),3返回文件指针的当前位置函数ftell(),函数调用格式:n=ftell(fp);其中,n是整型变量,fp是文件指针。函数功能:返回文件指针fp指定的文件的当前位置,用当前位置相对于文件开始位置的位移量表示。例如:fseek(fp,20,0);n=ftell(fp);则n=20。,