资源描述
,西安电子科技大学软件学院,-School of Computer Software,Xidian University,China,1,文 件,文 件,外存上的数据存储在文件中,控制器,运算器,内存储器,外存储器,(硬盘、U盘等),输入设备,(键盘等),输出设备,(显示器等),主机,在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存放在内存中的数据被释放。,如果如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。,外存上的数据存储在文件中控制器运算器内存储器外存储器输入设备,文件由操作系统管理,根目录,打开的子目录,子,目,录,打开的子目录中的文件,文件由操作系统管理根目录打开的子目录子打开的子目录中的文件,C语言中的文件概述,文件与文件名,文件,是指存放在外部存储介质上的数据集合,为了标识一个文件,每个文件都必须有一个文件名,其一般结构为:,主文件名.扩展名,文件命名规则需遵循操作系统的约定,文件分类,根据文件的内容,可分为程序文件和数据文件,程序文件又可分为源文件、目标文件和可执行文件。,根据文件的组织形式,可分为顺序存取文件和随机存取文件,根据文件的存储形式,可分为,文本文件,和,二进制文件,。,例如:,test.c,test.cpp,stud.dat,考号.txt,d:tc20fact.c,C语言中的文件概述文件与文件名文件是指存放在外部存储介质上的,文本文件和二进制文件,文本文件,二进制文件,以文本(字符串)格式存储,文本分行,行尾有行结束标志,读写时发生数据转换(自动或人工),转换过程可逆,程序容易处理,程序员也容易理解,效率较低,以二进制格式存储,内容不分行,行尾无行结束标志,读写时不发生数据转换,文件中的内容与信息在内存中的存储布局相同,程序容易处理,程序员不容易理解,效率较高,文本文件和二进制文件文本文件以文本(字符串)格式存储以二进制,例如 int,型数,据,10000,在文件中的存储方式,00000000,文本形式,00000000,00100111,00010000,10000的内存存储形式(32位),00110001,00110000,00110000,00110000,00110000,00000000,00000000,00100111,00010000,二进制形式,49,48,48,48,48,0,0,39,16,例如 int型数据10000在文件中的存储方式00000,C语言中的文件概述,读文件与写文件,所谓读文件是指将外存文件中的数据读取到计算机内存的操作。(外设也被抽象为文件),控制器,运算器,内存储器,外存储器,(硬盘、U盘等),输入设备,(键盘等),输出设备,(显示器等),主机,所谓写文件是指从计算机内存向外存文件写入数据的操作。,读,读,写,写,C语言中的文件概述读文件与写文件所谓读文件是指将外存文件中的,C语言中的文件概述,构成文件的基本单元与流式文件,C语言,将文件看作是由一个一个的字符(文本文件)或字节(二进制文件)组成的。将这种文件称为流式文件。,控制器,运算器,内存储器,输入设备、,外存,输出设备、,外存,主机,0 1 0 0 1,1 1 0 1 0,C语言中的文件概述构成文件的基本单元与流式文件C语言将文件看,文件缓冲区,输出文件缓冲区,输入文件缓冲区,程序数据区,变量,a,慢速的外设与快速的主机(CPU、内存)之间需要一个缓冲区(一般由系统创建),以暂存需要传输的数据,文件缓冲区输出文件缓冲区输入文件缓冲区程序数据区变量a慢速的,缓冲文件系统,慢速的外设与快速的主机(CPU、内存)之间需要一个缓冲区(一般由系统创建),以暂存需要传输的数据,外存文件,输出文件缓冲区,输入文件缓冲区,程序数据区,a,缓冲文件系统慢速的外设与快速的主机(CPU、内存)之间需要一,文件的基本操作,文件打开操作,文件关闭操作,读取文件中的数据操作,在文件中写入数据的操作,文件结束检测操作,文件错误检测操作,文件缓冲区与流刷新操作,文件指针定位操作,文件指针位置查询操作,文件指针重定位操作,文件的基本操作文件打开操作,文件的基本操作,在C程序中如何操作文件?,由C系统(C语言实现者)提供文件操作函数,按照一定的格式和步骤,借助,文件指针,,调用文件操作函数,,文件的基本操作在C程序中如何操作文件?,文件操作的标准库函数(,stdio.h,),fopen,fclose fcloseall,feof,fgetc /fputc,fgets /fputs,fscanf /fprintf,fread /fwrite,rewind,fseek,ferror,fflush,文件操作的标准库函数(stdio.h)fopen,文件操作的标准库函数,fopen,fclose,feof,fscanf /fprintf,(,其他函数,以后再介绍,也可自己看),文件操作的标准库函数fopen,文件指针,文件指针类型,文件指针类型格式:,FILE*,说明:所有对文件的操作都需要使用文件指针类型,文件指针变量,定义格式:,FILE*fp;,说明:要访问某个文件,一定需要首先定义文件指针类型的变量,并将该变量与对应文件关联起来,此后才能进行文件操作,文件指针文件指针类型文件指针类型格式:FILE*文件指针,文件的打开和关闭,对文件进行操作前,必须先打开该文件;使用结束后,应立即关闭。,语言规定了标准输入输出函数库,用,fopen(),函数打开一个文件,用,fclose(),函数关闭一个文件。,进行文件操作前,首先应定义一个文件指针变量,格式为:,FILE*fp;,其中,变量名fp可换成其他名字,文件的打开和关闭对文件进行操作前,必须先打开该文件;使用结束,若文件打开操作成功,此后在程序中,fp就代表外存上的文件fact.c,打开文件和关闭文件,用函数,fopen(),打开指定文件,例如,以只读方式打开文件fact.c:,fp=fopen(,fact.c,r,);,fp=fopen(,文件名,打开文件方式,);,用函数,fclose(),关闭前面打开的文件,fclose(fp);,若文件打开操作成功,此后在程序中,fp就代表外存上的文件fa,打开文件的方式,fp=fopen(,文件名,打开文件方式,);,打开文件的方式fp=fopen(文件名,打开文件方,创建,一个,数据文件,(向文件写入数据),创建一个数据文件(向文件写入数据),创建数据文件,步骤:,1)定义文件指针变量和其他变量;,2)以只写方式(或追加方式)打开文件(,用,fopen,函数,);,3)是否继续写入:,是,转,4,);,否,转,5,);,4)向文件中写入一个数据,(,用,fprintf,函数,),,转3);,5)关闭文件(,用,fclose,函数,)。,创建数据文件步骤:,格式化读写数据:,fscanf,/fprintf,函数,fprintf(),以指定格式向文件写入数据,返回值为写入的字符个数,fprintf,(文件指针,格式串,输出表列);,/除了增加文件指针参数,与,printf,用法相同,例如:,fprintf(fp,%d,10000);/将10000写入文件,一般不需要使用fprintf的返回值,写入整数或浮点数时,数之间应有间隔,例如,将从键盘输入的5个整数写入“c.in”文件。,格式化读写数据:fscanf/fprintf函数fpri,#include,int main(),FILE*fout;int i,a;,fout=fopen(c.in,w);,if(,fout=NULL,),printf(open file error!n);,return 0,;,创建文件:格式化读写,编写程序,将从键盘输入的5个整数写入“c.in”文件。,for(i=0;i5;i+),scanf(%d,fprintf(fout,%d,t,a);,fclose(fout);,return 0;,#include 创建文件:格式化读写编写,读取,数据文件,中的数据,读取数据文件中的数据,读取文件中的数据,步骤:,1)定义文件指针变量和其他保存数据的变量;,2)以只读方式打开文件(,用,fopen,函数,);,3)判断文件是否结束(,用,feof,函数,):,是,转5);,否,转4);,4)从文件中读取一个数据(,用,f,scanf,函数,)并进行需要的处理,转3);,5)关闭文件(,用,fclose,函数,)。,读取文件中的数据步骤:,格式化读数据:fscanf,fscanf,(文件指针,格式串,输入表列);,/除了增加文件指针参数,与,scanf,的用法相同,/函数的返回值为读取到的数据个数,例如:,fscanf(fp,%d,/从文件中读取一个整数,函数,fscanf(),以指定格式从文件中读取数据,返回值为读取到的数据个数,例如,已知文本文件“c.in”中有,若干个,整数,读取其中的所有整数并通过显示屏输出。,格式化读数据:fscanffscanf(文件指针,格式串,输,#include,#include,int main(),FILE*fin;int a;,fin=fopen(c.in,r);,if(,fin=NULL,),printf(open file error!n);,return,0;,读取文本文件中的整数:格式化读,编写程序,读取“c.in”文件中的每个整数并输出至屏幕。,while(,!feof(fin),),if(fscanf(fin,%d,&a)!=1),break;,printf(%dt,a);,fclose(fin);,return 0;,#include 读取文本文件中的整数:格,#include,int main(),FILE*fin,*fout;int a,b;,fin=fopen(c.in,r);,fout=fopen(csqr.dat,w);,if(,fin=NULL|fout=NULL,),printf(open file error!n);,exit(0);,创建文件:从一个文件读取,写入另一个文件,编写程序,将“c.in”文件中的每个整数取出,求平方后写入“csqr.dat”。,while(,!feof(fin),),if(fscanf(fin,%d,&a)!=1),break;,b=a*a;,fprintf(fout,%12d,b);,fclose(fin);,fclose(fout);,return 0;,#include 创建文件:从一个文件读取,文件操作的标准库函数,fopen,fclose,feof,fscanf /fprintf,fgtec/fputc,ch=,fgetc(,f,in),等同于 fscanf(fin,%c,&ch),fputc(fout,ch)等同于 fprintf(fout,%c,ch),(其他文件操作函数以后再介绍),End,文件操作的标准库函数fopen End,文本文件和二进制文件,文本文件,二进制文件,以文本(字符串)格式存储,文本分行,行尾有行结束标志,读写时发生数据转换(自动或人工),转换过程可逆,程序容易处理,程序员也容易理解,效率较低,以二进制格式存储,内容不分行,行尾无行结束标志,读写时不发生数据转换,文件中的内容与信息在内存中的存储布局相同,程序容易处理,程序员不容易理解,效率较高,文本文件和二进制文件文本文件以文本(字符串)格式存储以二进制,例如 int,型数,据,10000,在文件中的存储方式,00000000,文本形式,00000000,00100111,00010000,10000的内存存储形式,00110001,00110000,00110000,00110000,00110000,00000000,00000000,00100111,00010000,二进制形式,49,48,48,48,48,0,0,39,16,例如 int型数据10000在文件中的存储方式00000,例如 int,
展开阅读全文