第12章 文件3.ppt_第1页
第12章 文件3.ppt_第2页
第12章 文件3.ppt_第3页
第12章 文件3.ppt_第4页
第12章 文件3.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、文件分类 缓冲文件系统 文件的指针 文件打开与关闭 文件应用,第12章,文件,内容提要:,文本文件与二进制文件,缓冲文件系统概念,文件的指针,文件的打开与关闭,文件应用,第,12,章,文件,文件是指存储在外部介质,上,且按文件名访问的一组,信息序列。,一、文件分类,文本文件(字符代码文件或,ASCII,代码文件),由一个一个字符组成,每一个字符用一个,ASCII,代码表示,,如,123.45,以,ASCII,代码形式,存储到磁盘需要,6,个字节。,特点:,可通过显示器或打印机显示,即可读,,比较直观。,一、文件分类,非文本文件(二进制文件,):,是指以数据,在内存中的存储形式原样输出存储到磁盘

2、上的,文件。如,123.45,在内存中以浮点数形式存储占,4,个字节,不管一个实数多大都占,4,字节。,特点:,节省存储空间,,输入输出无需转换,速度快,不便阅读。,说明:,一个,C,文件是一个字节流或二进制流,它把,数据看作是一连串的字符序列(字节),而不,考虑记录的界限,即,C,文件并不是由记录组成的。,由于对文件的操作要与各种外部设备发生联,系,因此对文件的输入输出(读写)过程是通,过操作系统来实现的。对文件的读写都是通过,标准的,I/O,函数进行的。,二、缓冲文件系统,(,标准,I/O),和非缓冲文件系统,缓冲文件系统(又称标准或高层文件系统),特点,:,对程序中的每一个文件都在内存中

3、开辟,一个,“,缓冲区,”,。,作用,:,从磁盘文件读入的数据先送到,“,输入缓,冲区,”,中,然后再从缓冲区依次将数据送给接,收变量。,在向磁盘文件输出数据时,先将程序数据区中变量,或表达式的值送到,“,输出文件缓冲区,”,中,待装满后,才一起输出给磁盘文件。目的减少对磁盘的读写次数,,即一次可以读入一批数据或输出一批数据。,输入文件缓冲区,(512,KB),输出文件缓冲区,(512,KB),变量,a,程序数据区,磁盘,文件,读,写,内存,二、缓冲文件系统,(,标准,I/O),和非缓冲文件系统,非缓冲文件系统:,不由系统自动设置所需,缓冲区,而由用户自己根据需要设置。,新的,ANSI,标准只

4、建议使用缓冲系统,并对,缓冲文件系统的功能进行了扩充,使既能用于,处理字符代码文件,也能处理二进制文件。,三、文件型指针类型,对文件的操作是通过文件指针实现的。关键,的概念是,“,文件指针,”,。,调用一个文件需要的信息:,文件当前读写的位置;,与该文件对应的内存缓冲区的地址;,缓冲区未被处理的字符数,(,字符指针,),;,文件的操作方式等,三、文件型指针类型,系统内部定义了一个称,FILE,的结构型类型。,typedef struct,int _fd;,/,文件号,int _cleft;,/,缓冲区中剩余的字符,int _mode;,/,文件操作模式,char *_nextc;,/,下一个字

5、符位置,char *_buff;,/,文件缓冲区位置,FILE;,四、文件的打开和关闭,文件必须先打开后,并及时关闭。,1,.,打开文件:,是在用户程序和操作系统之,间建立起联系,程序要把操作的文件的一些信,息通知操作系统,如文件名、文件操作方式,(读,/,写):,读文件,:,需要先确认此文件是否已存在,并,将读当前位置设定为文件的开头。,写文件,:,需要检查原来是否有同名文件,如,有则将该文件原有内容删除,如无同名文件就,建立一个新文件,然后将写当前位置设定于文,件的开头,以便从文件开头写入数据。,1.,文件的打开方式,:,FILE *fp;,if(fp=fopen(,文件名,使用文件方式,

6、)=,NULL),printf(cannot open this file.,n);,exit(0);,说明:,文件名可以是字符串常量、数组名或字符指针。,使用文件方式参见附表。,FILE *fp;,if(fp=fopen(,文件名,使用文件方式,)=,NULL),printf(cannot open this file.,n); exit(0);,文件使用方式,文件使用方式,含,义,r,(,只读),w,(,只写),a,(,追加),rb,(,只读),wb,(,只写),ab,(,追加),r+,(,读写),w+,(,读写),a+,(,读写),rb+,(,读写),wb+,(,读写),ab+,(,读写

7、),2.,文件的关闭,文件的关闭形式:,fclose(fp);,功能:将,fp,所指文件关闭。,释放文件有关信息区;,将输出文件缓冲区的内容(无论缓冲区是否为满),都输出写入文件,然后关闭文件,这样可防止丢,失本来应写入文件的数据。,五、文件应用示例,例,1,:格式化的输入输出。,fprintf( fp,格式字符串,输出项表列,),功能,:将输出按格式串规定输出到,fp,所指文件,。,fscanf( fp,格式字符串,输入项表列,),功能,:,从,fp,所指文件按格式串读入数据。函数执行成功,返回读得的数据项个数;若在读第一项前已到达文件,结束处,则返回,EOF,。,#,include ,#i

8、nclude ,void main(),FILE *fp;,char name10; int num; float score;,if(fp=fopen(file3.txt,w+)=NULL),printf(cannot open this file .,n);,exit(0);,printf(enter name,num,score:);,scanf(%s %d %f,name, ,while(strlen(name)1),fprintf(fp,%s %d %f,n,name, num, score);,printf(enter name,num,score:);,scanf(%s %d %

9、f,name, ,rewind(fp);,while(fscanf(fp,%s %d %f,name, ,fclose(fp);,输入:,enter name,num,score:,zhangsan 0501 90,enter name,num,score:,liming 0502 85,enter name,num,score:,gaofei 0503 95,enter name,num,score:,0 0 0,输出:,zhangsan 0501 90.00,liming 0502 85.00,gaofei 0503 95.00,例,2,:数据块(二进制形式)的读写。,fread( buf

10、fer, size, count, fp),功能,:,从指定文件读入,count,个大小为,size,的字,节数据块,存入,buffer,所指存储单元。返回所,读的数据项个数,如遇文件结束或出错返回,0,。,fwrite( buffer, size, count, fp),功能,:,buffer,所指存储单元的数据取,size*count,个字节送,fp,所指文件。返回写到,fp,所指文件中的数据项个数。,例,2,:数据块(二进制形式)的读写。,fread( buffer, size, count, fp),fwrite( buffer, size, count, fp),说明:,buffer

11、,为输入输出在内存中存放的首地址。,size,为读、写的字节数,即数据块的大小。,count,为输入输出的数据项个数。,fread(),和,fwrite(),用于二进制文件的输入,输出,#,include ,#define SIZE 4,struct student,char name10; int num, age; char addr15;,studSIZE;,void save_load(),FILE *fp; int i;,if(fp=fopen(stu_list,wb+)=NULL),printf(cannot open file.,n);,exit(0);,for(i=0; iSI

12、ZE; i+),if(fwrite( exit(0);,rewind(fp);,for(i=0; iSIZE; i+),if(fread( ,void main(),int i;,for(i=0; iSIZE; i+),scanf(%s %d%d%s, , ,输入:,zhang 1001 19 room_101,li 1002 20 room_102,wang 1003 21 room_103,zhao 1004 21 room_104,输出:,zhang 1001 19 room_101,li 1002 20 room_102,wang 1003 21 room_103,

13、zhao 1004 21 room_104,例,3,:具有文件拷贝功能的程序,filecopy.c,说明两个问题,:命令行参数的应用和文件的字,符输入与输出应用。,fgetc( fp ),功能,:,从指定文件读入一个字符。,fputc( ch, fp ),功能,:,把一个字符写到指定文件中去。,#,include ,#include ,filecopy(FILE *fp1, FILE *fp2),char c;,while(c=fgetc(fp1)!=EOF),fputc(c, fp2);,例,3,:具有文件拷贝功能的程序,filecopy.c,void main(int argc, char

14、 *argv),filecopy(FILE *fp1, FILE *fp2) ;,FILE *fp1, *fp2;,if(argc1),if(fp1=fopen(*+argv,r)=NULL),printf(can,t fopen %s,n,*argv);,exit(0);,if(fp2=fopen(*+argv,w)=NULL),printf(can,t fopen %s,n,*argv); exit(0);,filecopy(fp1,fp2);,运行时情况:,$,vi filecopy.c,$cc file.c,o filecopy,$,filecopy t.c t1.c,运行时数据状态:

15、,fiecopy,0,t.c,0,t1.c,0,argv0,argv1,argv2,argv,filecopy,0,t.c,0,t1.c,0,argv0,argv1,argv2,argv,fgets(,str, n, fp),字符串输入函数。,其功能是从,fp,指定的文件中读取一个串,若满足以,下条件读取结束:,已读取,n,-,1,个字符,、,当前读取,到的字符是回车符,、,已读取到文件尾。,读取的字符个数至多,n,-,1,个,余下的一个字节空间作,为加,0,串结束符。,读取回车符时,也作为一个字符送入由,str,所指的内,存,缓冲区。然后再加一个字符串结束符,0,str,为数组名或字符指针;

16、,n,为读取字符个数。,例,4,:文件的字符串的输入输出处理,fputs(str,fp),字符串输出(写)函数,其功能是将,str,所指定的字符串写到,fp,指向的文件中。,与,fgets(),函数在输入字符串末尾自动加,0,特性,对应,,fputs(),函数在将,字符串写入文件时,其末尾,的,0,字符自动舍去。,fputs(),与,puts(),功能不同,,fputs(),舍去串结束符,而,puts(),把它转换成回车符输出。,例,4,:文件的字符串的输入输出处理,#,include ,#include ,void main(),FILE *fp; char str16;,if(fp=fopen(file2.txt, w)=NULL),printf(cannot open this file.,n); exit(0);,while(strlen(gets(str)0) fputs(str, fp);,fclose(fp);,if(fp=

温馨提示

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

评论

0/150

提交评论