C语言程序设计教程(第2版)课件第13章课件_第1页
C语言程序设计教程(第2版)课件第13章课件_第2页
C语言程序设计教程(第2版)课件第13章课件_第3页
C语言程序设计教程(第2版)课件第13章课件_第4页
C语言程序设计教程(第2版)课件第13章课件_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计教程(第2版)课件第13章第第1313章章 文文 件件本章要点本章要点掌握文件的基本概念掌握文件的基本概念掌握文件类型指针掌握文件类型指针理解文件操作的基本方法理解文件操作的基本方法掌握文件处理函数掌握文件处理函数本章难点本章难点对文件进行不同操作的函数的功能及其用法对文件进行不同操作的函数的功能及其用法C语言程序设计教程(第2版)课件第13章13.1 13.1 C文件的概述文件的概述 13.1.1 文件的基本概念文件的基本概念 一、文件:一、文件:是指存储在外部介质上数据的集是指存储在外部介质上数据的集合。合。 操作系统是以文件为单位对数据进行管理操作系统是以文件为单位对数据进

2、行管理的。每一个与主机相连的输入或输出设备都看的。每一个与主机相连的输入或输出设备都看作是一个文件。作是一个文件。 二、文件的存在形式及分类二、文件的存在形式及分类 文件的存在形式文件的存在形式:文件名:文件名+文件内容。文件内容。 文件内容文件内容:是一个字符是一个字符(字节字节)序列,即由一个个字符序列,即由一个个字符 (字节字节)的数据顺序组成。对文件的存取是以字的数据顺序组成。对文件的存取是以字 符符(字节字节)为单位的,这类文件称为为单位的,这类文件称为流式文件流式文件。 C语言程序设计教程(第2版)课件第13章文件的分类文件的分类:ASCII ASCII 码文件码文件( (文本文件

3、文本文件) ):文件的每一个字节放:文件的每一个字节放 一个一个ASCII代码,代表一个字符。代码,代表一个字符。 二进制文件二进制文件 :把内存中的数据按其在内存中的存:把内存中的数据按其在内存中的存 储形式原样输出到文件上。储形式原样输出到文件上。 根据数据在内存的组织形式不同可分为两类文件根据数据在内存的组织形式不同可分为两类文件 ASCII 码文件(文本文件)码文件(文本文件) 二进制文件二进制文件 根据数据读写方式不同可分为两类文件根据数据读写方式不同可分为两类文件 顺序存取文件顺序存取文件 随机存取文件随机存取文件 C语言程序设计教程(第2版)课件第13章三、文件的基本操作三、文件

4、的基本操作 打开文件打开文件 把文件名等目录信息从磁盘上读把文件名等目录信息从磁盘上读 入内存并存入结构体。入内存并存入结构体。 关闭文件关闭文件 把内存结构体中的文件名等目录把内存结构体中的文件名等目录 信息写入磁盘。信息写入磁盘。(3) 写文件写文件 向文件写内容。向文件写内容。 (4) 读文件读文件 从文件读内容。从文件读内容。 四、四、 文件的输入输出方式文件的输入输出方式 C语言对文件进行处理分为:语言对文件进行处理分为: 非缓冲文件系统非缓冲文件系统 缓冲文件系统缓冲文件系统C语言程序设计教程(第2版)课件第13章非缓冲文件系统非缓冲文件系统 程序与外设直接进行数据交换。程序与外设

5、直接进行数据交换。 特点特点 每读写一次都要启动外设。每读写一次都要启动外设。 缓冲文件系统缓冲文件系统 程序与外设通过内存缓冲区进行程序与外设通过内存缓冲区进行 数据交换。(常用的方式)数据交换。(常用的方式) 特点特点 只有内存缓冲区满只有内存缓冲区满(写盘写盘)或空或空(读盘读盘)才才 启动外设。启动外设。 程序程序数据区数据区输出文件输出文件缓冲区缓冲区输入文件输入文件缓冲区缓冲区磁盘磁盘C语言程序设计教程(第2版)课件第13章1. 文件类型文件类型(FILE) 每个被使用的文件都在内存中开辟一个区,每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件名,状态,当用来存

6、放文件的有关信息(如文件名,状态,当前位置等)。这些信息保存在一个结构体类型的前位置等)。这些信息保存在一个结构体类型的变量中。结构体类型由系统定义为变量中。结构体类型由系统定义为“FILE”。 有的有的C版本在版本在 stdio.h文件中有如下定义:文件中有如下定义:typedef struct int _fd;; /* 文件号文件号 */ int _cleft; /* 缓冲区中剩下的字符缓冲区中剩下的字符 */ int _mode; /* 文件操作模式文件操作模式 */ char *_nexttc; /* 下一个字符位置下一个字符位置 */ char *_buff; /* 文件缓冲区位置文

7、件缓冲区位置 */ FILE;13.1. 文件指针文件指针C语言程序设计教程(第2版)课件第13章2. 定义定义FILE类型指针变量类型指针变量 FILE 类型的指针变量定义方法类型的指针变量定义方法 FILE *指针变量名指针变量名;例如:例如:FILE *fp;含义:含义:fp是一个指向是一个指向FILE类型结构体的指针变量。类型结构体的指针变量。 可以使可以使fpfp指向某个文件的结构体变指向某个文件的结构体变量,从而通过该结构体变量中的文件信量,从而通过该结构体变量中的文件信息能够访问该文件。息能够访问该文件。 C语言程序设计教程(第2版)课件第13章13.2 13.2 文件的打开与关

8、闭文件的打开与关闭 13.2.1 文件的打开函数(文件的打开函数(fopen函数)函数) (1) (1) 调用方式调用方式: FILE *fp ;fp= fopen(文件名,文件的使用方式);所要打开的文件名。所要打开的文件名。必须是用双引号引起必须是用双引号引起的字符串常量。的字符串常量。 具有特定含意的符号具有特定含意的符号也必须由双引号引起也必须由双引号引起用户定义的文件类型指针变量用户定义的文件类型指针变量功能功能:以指定的方式打开指定的文件,若操作:以指定的方式打开指定的文件,若操作 成功,则返回一个指向该文件的指针,若打成功,则返回一个指向该文件的指针,若打 开文件时出现错误,则返

9、回空指针开文件时出现错误,则返回空指针NULL。 例例 FILE *fp; fp=fopen(stu.dat,r);C语言程序设计教程(第2版)课件第13章文件使用方式文件使用方式 基本方式字符(单独使用是对文本文件):基本方式字符(单独使用是对文本文件): r 仅为读而打开。仅为读而打开。 ( (只读文件只读文件) ) w 仅为写而打开。仅为写而打开。 ( (建立新文件建立新文件) ) a 仅为添加而打开。仅为添加而打开。( (写旧文件写旧文件) ) 按二进制格式读写文件(基本方式字符按二进制格式读写文件(基本方式字符+“b”) b 辅助说明,按二进制格式读写文件。辅助说明,按二进制格式读写

10、文件。 同时进行读写文件(基本方式字符同时进行读写文件(基本方式字符+“b”+“+”) + 辅助说明,可同时进行读和写文件。辅助说明,可同时进行读和写文件。 例如:例如:fp=(“stu.dat”,“rb”);例如:例如:fp=(“stu.dat”,“r+”);C语言程序设计教程(第2版)课件第13章例:例:#include main() FILE *fp; if(fp=fopen(stu.dat,r) =NULL) printf(file not found.); exit(0); else printf(file opened ok!); fclose(fp); 程序运行结果:程序运行结果

11、: 如果磁盘上存在文件如果磁盘上存在文件stu.dat,屏幕上会显示,屏幕上会显示 ok!,否则屏幕上显示,否则屏幕上显示 found.。常使用此方法打常使用此方法打开一个文件开一个文件exit函数的功能是关闭所函数的功能是关闭所有文件,终止程序运行。有文件,终止程序运行。exit(0)为正常终止程序为正常终止程序C语言程序设计教程(第2版)课件第13章13.2.2 文件的关闭函数(文件的关闭函数(fclose函数)函数) (1) 调用方式调用方式: fclose(fclose(文件指针文件指针) ); 功能功能:关闭由文件指针指定的文件,把缓冲区:关闭由文件指针指定的文件,把缓冲区 中的数据

12、(未装满缓冲区的数据)输出中的数据(未装满缓冲区的数据)输出 到磁盘上,释放文件指针。到磁盘上,释放文件指针。例如:例如: FILE *fp; fp=fopen(“output.dat”,“r+”); /* 进行读写操作进行读写操作 */ fclose(fp);注意:注意:fopen函数和函数和fclose函数总是成对出现的。函数总是成对出现的。 无无fclose函数时会导致部分数据丢失!函数时会导致部分数据丢失!C语言程序设计教程(第2版)课件第13章13.3 13.3 文件的读写文件的读写 13.3.1 单个字符操作的读写函数单个字符操作的读写函数 这两个函数是以字符为单位进行文件读写的函

13、数。这两个函数是以字符为单位进行文件读写的函数。1. fputc1. fputc函数函数一般调用形式:一般调用形式: fputc(fputc(字符常量或变量字符常量或变量, ,文件指针文件指针); ); 功能:把指定字符存入文件指针所指的文件中。功能:把指定字符存入文件指针所指的文件中。 如果输出失败,则返回一个如果输出失败,则返回一个EOF(-1)。)。例如例如:fputc(ch,fp); (其中其中ch为字符变量为字符变量,fp为文件指针为文件指针) 含义:将含义:将ch的值输出到的值输出到fp所指向的文件中去。所指向的文件中去。(EOF是在是在stdio.h文件中定义的符号常量,值为文件

14、中定义的符号常量,值为-1)C语言程序设计教程(第2版)课件第13章2. fgetc2. fgetc函数函数一般调用形式:一般调用形式: 字符变量字符变量=fgetc(=fgetc(文件指针文件指针); ); 功能:从文件指针所指文件中读一个字符赋给指功能:从文件指针所指文件中读一个字符赋给指 定的字符变量。当遇文件结束符,返回一定的字符变量。当遇文件结束符,返回一 个文件结束标志个文件结束标志EOF(-1)。)。例如:例如:ch=fgetc(fp); 其中其中ch为字符变量,为字符变量,fp为文件指针。为文件指针。 含义:从含义:从fp所指向的文件中读入一个字符赋所指向的文件中读入一个字符赋

15、 给字符变量给字符变量ch。C语言程序设计教程(第2版)课件第13章例例: 阅读程序。阅读程序。 #include stdio.h #define NULL 0 main() FILE *fp; int count=0; char c; if(fp=fopen(“”,“r”)=NULL) printf(“Cant Open File n”); exit(0); c=fgetc(fp); while(c!=EOF) count+; c=fgetc(fp); printf(“count=%dn”,count); fclose(fp); 若文件的内容是若文件的内容是: abcd1234ABCD输出结

16、果:输出结果: 12这是读一个文本文件这是读一个文本文件中字符,并判断文件中字符,并判断文件是否结束的常用方法是否结束的常用方法C语言程序设计教程(第2版)课件第13章13.3.2 字符串的读写函数字符串的读写函数这两个函数是以字符串为单位进行文件读写的函数。这两个函数是以字符串为单位进行文件读写的函数。一般调用形式:一般调用形式: fputs(fputs(字符串字符串, ,文件指针文件指针);); 1. fputs函数函数功能:向指定文件输出一个字符串。功能:向指定文件输出一个字符串。例如:例如:fputs(str,fp); (其中其中str是字符数组名是字符数组名)含义:向含义:向fp 所

17、指向的文件中输出所指向的文件中输出str中的字符串。中的字符串。2. fgets函数函数fgets(fgets(字符串字符串, ,字符串长度字符串长度, ,文件指针文件指针);); 功能:从指定文件中读入一个字符串。功能:从指定文件中读入一个字符串。 例如:例如:fgets(str,n,fp); (其中其中str是字符数组名是字符数组名)含义:从含义:从fp指向的文件读取长度为指向的文件读取长度为n-1的字符串,的字符串, 最后加一个最后加一个0存入字符数组存入字符数组str中。中。调用形式:调用形式: C语言程序设计教程(第2版)课件第13章13.3.3 数据块的读写函数数据块的读写函数一般

18、调用形式:一般调用形式: fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 其中:其中:buffer:是一个指针。(是起始地址)。是一个指针。(是起始地址)。 对对fread来说,它是读入数据的存放地址。来说,它是读入数据的存放地址。 对对fwrite来说,它是输出数据的地址。来说,它是输出数据的地址。size :要读写的字节数。要读写的字节数。 count:要进行读写多少个要进行读写多少个size字节的数据项。字节的数据项。 功能:对功能:对fp所指的文件读写所指的文件读写buffer所指的所指的size*count 个字节

19、数据。个字节数据。 例如:例如:fread(f,4,2,fp); (其中其中f是实型数组名是实型数组名)C语言程序设计教程(第2版)课件第13章例例1 把数组把数组a写入文件写入文件fa;再从再从fa读入数组读入数组b。 #include stdio.h main() FILE* fp; int a100=1,5,6,78,21,34,67,87,23,b100, i ; fp=fopen(tmp,wb); fwrite(a,sizeof(a),1,fp); /* fwrite(a,sizeof(int),100,fp);*/ fclose(fp); fp=fopen(tmp,rb); fre

20、ad(b,sizeof(a),1,fp); for(puts(),i=0;i10;i+)printf(%6d,bi); fclose(fp);C语言程序设计教程(第2版)课件第13章13.3.4 格式化读写函数格式化读写函数这两个函数是进行格式读写文件的函数这两个函数是进行格式读写文件的函数 。一般调用形式:一般调用形式: fprintf(文件指针,格式字符串,输出表列)文件指针,格式字符串,输出表列); fscanf(文件指针,格式字符串,输入表列文件指针,格式字符串,输入表列) ; 例如:例如:fprintf(fp,“%d,%6.2f”,i,x);功能:按指定格式将数据写到指定文件中。功能

21、:按指定格式将数据写到指定文件中。 或从指定文件按格式输入数据。或从指定文件按格式输入数据。又如:又如:fscanf(fp,“%d,%f”,&i,&x);C语言程序设计教程(第2版)课件第13章13.413.4 文件的定位与出错检测文件的定位与出错检测 1. rewind函数函数一般调用形式:一般调用形式: rewind(rewind(文件指针文件指针);); 功能:使位置指针重新返回文件的开头。功能:使位置指针重新返回文件的开头。2. fseek函数函数 一般调用形式:一般调用形式: fseek(fseek(文件指针文件指针,位移量,起始点,位移量,起始点) ); 起始点:用

22、起始点:用0、1、2或其对应的名字或其对应的名字SEEK_SET、 SEEK_CUR、SEEK_END代替,分别表代替,分别表 示文件开始、文件当前位置、文件末尾。示文件开始、文件当前位置、文件末尾。 位移量:指以起始点为基点,向前(位移量:指以起始点为基点,向前(-)或向后移动的)或向后移动的 字节数。字节数。ANSI C标准规定在数字末尾加一个标准规定在数字末尾加一个 字母字母L,表示,表示long型。型。 C语言程序设计教程(第2版)课件第13章功能:把文件的读写位置指针移到指定的位置。功能:把文件的读写位置指针移到指定的位置。 例如:例如:fseek(fp,128L,SEEK_SET)

23、; 将位置指针移到离文件头将位置指针移到离文件头128个字节处。个字节处。例如:例如:fseek(fp,-10L,2); 将位置指针从文件末尾处向后退将位置指针从文件末尾处向后退10个字节。个字节。注意:注意:fseek函数一般用于二进制文件。函数一般用于二进制文件。 3. ftell函数函数 一般调用形式:一般调用形式: ftell(ftell(文件指针文件指针);); 功能:返回文件位置指针的当前值。功能:返回文件位置指针的当前值。例如:例如:pos=ftell(fp); 获取获取fp指向文件的当前读写位置,并将其值指向文件的当前读写位置,并将其值 赋给变量赋给变量pos 。 C语言程序设

24、计教程(第2版)课件第13章 . ferror()函数函数 ferror()函数用来确定文件操作系统中是否出错。其函数函数用来确定文件操作系统中是否出错。其函数原型为:原型为: int ferror(FILE *fp); 如果如果ferror()函数返回值为函数返回值为0,则表示此前的文件操作成功;,则表示此前的文件操作成功;否则,若返回一个非否则,若返回一个非0值,则表示最近一次文件操作出错。值,则表示最近一次文件操作出错。由于对文件的每次由于对文件的每次I/O操作都会形成新的出错码,所以在操作都会形成新的出错码,所以在每次文件操作后应立即调用每次文件操作后应立即调用ferror()函数查看

25、此次操作是函数查看此次操作是否成功,否则会丢失信息。否成功,否则会丢失信息。 表示上述功能常用的语句的是:表示上述功能常用的语句的是: if(ferror(fp) printf(file can not I/On); fclose(fp); exit(0); C语言程序设计教程(第2版)课件第13章5. clearer()函数函数 clearer()函数的函数原型为:函数的函数原型为: void clearer(FILE *fp); 功能是清除文件结束标志和文件出错标志功能是清除文件结束标志和文件出错标志(设置为设置为0)。本函数没有返回值。本函数没有返回值。6exit函数函数 当文件出现错误

26、时,为了避免数据丢失,正当文件出现错误时,为了避免数据丢失,正常返回操作系统,可以调用过程控制函数常返回操作系统,可以调用过程控制函数exit关关闭文件,终止程序的执行。闭文件,终止程序的执行。一般形式为:一般形式为:exit(status);C语言程序设计教程(第2版)课件第13章13.5 13.5 文件综合实例文件综合实例 编写一个程序,从编写一个程序,从data.datdata.dat文本文件中读出文本文件中读出一个字符,将其加密后写入一个字符,将其加密后写入data1.datdata1.dat文件中,加文件中,加密方式是字符的密方式是字符的ASCIIASCII码加码加1 1。 分析:先

27、打开分析:先打开data.datdata.dat文本文件并建立文本文件并建立data1.datdata1.dat文件,从前者读出一个字符文件,从前者读出一个字符c c,将,将(c+1)%256(c+1)%256这个这个ASCIIASCII码对应的字符写入后者中。码对应的字符写入后者中。直到读完为止。直到读完为止。 C语言程序设计教程(第2版)课件第13章#includevoid main()FILE *fp,*fp2; char c; if(fp=fopen(data.dat,r)=NULL) printf(不能打开文件不能打开文件n); return; if(fp1=fopen(data1.

28、dat),w)=NULL) printf(不能建立文件不能建立文件n); return; while(!feof(fp) c=fgetc(fp); c=(c+1)%256; fputc(c,fp1); fclose(fp); fclose(fp); C语言程序设计教程(第2版)课件第13章 编写程序,创建数据文件编写程序,创建数据文件goods.dat用于存储用于存储商品信息。已知每一个商品商品信息。已知每一个商品 包括:名称,单包括:名称,单价,进货量,和库存价,进货量,和库存4项数据。按指定的格式项数据。按指定的格式读写读写.C语言程序设计教程(第2版)课件第13章#includemain

29、()int count ,amount,stock;float price;char name20;FILE *fp;if(fp=fopen(“goods.dat”,”wb”)= =NULL)printf(“can not open file.n”);exit(0);C语言程序设计教程(第2版)课件第13章for(count=0; ;count+)fprintf(“%d”,count+1);scanf(“%s%d%d”,name,&price,&amount,&stock);if(price=0)break; printf(fp,”%sn%.2f,%d,%d”,name

30、,price,amount,stock);C语言程序设计教程(第2版)课件第13章fclose(fp);fp=fopen(“goods.dat”,”rb”);printf(“overstock goods is:n”);while(!feof(fp)fscanf(fp,”%s%f,%d,%d”,name,&price,&amount,&stock);if(stock=amount/2);printf(“%s,%.2f,%d,%dn”,name,price,amount,stock);fclose(fp);C语言程序设计教程(第2版)课件第13章13.6 13.6 小小

31、结结(1)(1)文件是指存储在外部介质上的数据集合。文件是指存储在外部介质上的数据集合。 (2)(2)对文件的操作包括文件的打开、关闭、读、写、文件的定对文件的操作包括文件的打开、关闭、读、写、文件的定位和出错的检验等。现在分别介绍如下:位和出错的检验等。现在分别介绍如下:在在C C语言中使用语言中使用fopen()fopen()函数完成对文件的打开操作。其一般函数完成对文件的打开操作。其一般调用方式为:调用方式为:fopen(fopen(文件名文件名,操作方式操作方式););关闭文件用函数关闭文件用函数fclose()fclose()函数来实现,其调用的形式为:函数来实现,其调用的形式为:f

32、close(fp);fclose(fp);文件的读函数包括文件的读函数包括fgetc()fgetc()函数、函数、fgets()fgets()函数、函数、fread()fread()函函数和数和fscanf()fscanf()函数。函数。 fgetc() fgetc()函数的功能是从指定的文件中读入一个字符。函数的功能是从指定的文件中读入一个字符。 fgets() fgets()函数的功能是从文件指针所指向的文件中,读入一函数的功能是从文件指针所指向的文件中,读入一个字符串。个字符串。 fscanf() fscanf()函数为格式化输入函数,其功能是从指定的文件中函数为格式化输入函数,其功能是从指定的文件中读取指定格式的数据。读取指定格式的数据。 fread() fread()函数的功能是从指定文件中读入一组数据。函数的功能是从指定文件中读

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论