Cppt课件第9章-文件

上传人:txadgkn****dgknqu... 文档编号:242742760 上传时间:2024-09-02 格式:PPT 页数:45 大小:293.49KB
返回 下载 相关 举报
Cppt课件第9章-文件_第1页
第1页 / 共45页
Cppt课件第9章-文件_第2页
第2页 / 共45页
Cppt课件第9章-文件_第3页
第3页 / 共45页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,*,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,C,语言程序设计,第,9,章 文 件,烟台大学 计算机学院,1,C 语言程序设计第 9 章 文 件烟台大学 计算机学院1,第,9,章 文件,9.1 文件的概念,9.2 文本文件的读写,9.3 二进制文件的读写,2024/9/2,2,第9章 文件9.1 文件的概念2023/9/92,文件,:存储在,外部存储介质,上相关,数据,的集合。,例如:程序文件中保存着程序,数据文件中保存着数据。,*,.,C,C语言的源程序文本文件,*,.,OBJ,目标文件二进制文件,*,.,EXE,可执行文件二进制文件,文件的存储特性,文件是一个,有序的数据序列,。,C语言把文件作为,一个字符(字节)序列,处理,对文件的存取是以字符(字节)为单位进行的。,9.1 文件的概述,9.1.1,文件和文件指针,1. 什么是文件,2024/9/2,3,文件:存储在外部存储介质上相关数据的集合。9.1 文件的概述,按文件存储数据的形式,ASCII文件(或称,文本文件,),ASCII,码文件中,每个字节,存放一个,ASCII,代码,代表一个字符,此种存储形式便于输出显示,在DOS操作系统下可以直接阅读。,二进制文件,二进制文件,中的,数据,是按照在内存中的,二进制,存储格式,存放的,此种存储形式节省存储单元。,二进制文件,在DOS操作系统下不能直接阅读。,9.1 文件的概述,9.1.1,文件和文件指针,2. 文件的种类,2024/9/2,4,按文件存储数据的形式9.1 文件的概述9.1.1 文件和文件,例如将整数,1949,分别存储在这两种数据文件中。,ASCII,文件:,ASCII,码,二进制文件:补码,占用4个字节,占用2个字节,9.1 文件的概述,9.1.1,文件和文件指针,2. 文件的种类,2024/9/2,5,例如将整数1949分别存储在这两种数据文件中。ASCII文件,按照对文件的处理方式,缓冲文件,利用缓冲文件系统处理的文件称为缓冲文件。系统处理方法是在内存中,为每个正在使用的缓冲文件开辟一个缓冲区,,,其大小是512个字节。现在的标准C对文件读写大都采用缓冲文件系统处理。,非缓冲文件,利用非缓冲文件系统处理的文件称为非缓冲文件。系统处理非缓冲文件时,不为文件开辟缓冲区,需要程序员自行设计并管理缓冲区。,9.1 文件的概述,9.1.1,文件和文件指针,2. 文件的种类,2024/9/2,6,按照对文件的处理方式9.1 文件的概述9.1.1 文件和文件,系统对文件的处理过程就是对文件进行,输入,/,输出,操作的过程。,从文件,读,数据时,先一次性从磁盘文件中读取一批数据到缓冲区,然后再从缓冲区逐个将数据送入变量。,向文件,写,数据时,也是先将变量中数据送到缓冲区,待缓冲区装满后,再一起存到磁盘文件中。,9.1 文件的概述,9.1.1,文件和文件指针,3. 缓冲文件和文件指针,磁盘文件,输出,输入,图10.2 系统对缓冲文件的处理,输入 输出,程序区,数据区,文件缓冲区,外存,内存,2024/9/2,7,系统对文件的处理过程就是对文件进行输入/输出操作的,9.1 文件的概述,3文件类型指针,在,缓冲文件系统,中,对每个正在使用的文件都自动分配一个,FILE,类型的,结构体变量,,用于存放文件的有关信息,如文件号、文件状态、缓冲区地址和大小等。,C,系统已经在“,stdio.h”,头文件中按格式进行了定义,typedef struct, int fd; /*文件描述符*/,int cleft; /*缓冲区中剩下的字符*/,int mode; /*文件操作模式*/,char *nextc; /*下一个字符位置*/,char *buff; /*文件缓冲区位置*/, FILE;,2024/9/2,8,9.1 文件的概述3文件类型指针 C系统已经在“stdio.,在C语言中,无论对磁盘文件操作,还是对设备文件的读/写都要通过FILE类型的结构体变量进行。,因此对于每个使用中的磁盘文件必须先定义一个FILE类型的文件指针变量。,文件型指针的定义格式如下:,FILE *文件指针变量名;,例: FILE *fp1; 或 FILE *fp5;,9.1 文件的概述,9.1.1,文件和文件指针,2024/9/2,9,在C语言中,无论对磁盘文件操作,还是对设备文件的读/写都要通,常用的调用形式,:,FILE,*,fp;,fp = fopen(,文件名,文件使用方式,);,文件名,:需要打开的文件名称(,字符串,)。,文件使用方式,:是具有特定含义的,符号,。,9.1 文件的概述,9.1.2,文件的打开与关闭,1.,文件打开函数,fopen(,),函数功能,:,按指定的,文件使用方式,打开指定的,文件,。,若文件打开,成功,,为该文件分配一个文件缓冲区和一个,FILE类型变量,返回一个FILE类型,指针,;,若文件打开,失败,,返回,NULL,。,2024/9/2,10,常用的调用形式:9.1 文件的概述 9.1.2 文件的打开,文本文件的三种基本使用方式,”,r,”:,只读方式,打开一个已存在的,文本文件。只能读取数据。,”,w,”:,只写方式,打开一个,文本文件。只能写入数据。若文件不存在,则自动建立一个新文件接收写入的数据;若,文件已存在,,则,删除旧文件,,建立一个同名的新文件 ,接收写入的数据。,”,a”:,追加方式,打开一个已存在的,文本文件。只能写入数据并追加在文件尾部,。,9.1 文件的概述,9.1.2,文件的打开与关闭,2024/9/2,11,文本文件的三种基本使用方式9.1 文件的概述 9.1.2,9.1 文件的概述,9.1.2,文本文件的使用方式,”,r+,”,:读,写方式,打开一个已存在的文本文件。可以读取数据。也可以写入数据。,”,w+,”,:读,写方式,打开一个已存在的文本文件。可以读取数 据。也可以写入数据。,若文件不存在,则自动建立一个新文件接收写入的数据;若,文件存在,,则,删除旧文件,,建立一个同名的新文件 ,接收写入的数据。,”,a+,”,:读,写方式,打开一个已存在的文本文件。可以读取数据。也可以追加在文件尾部。,2024/9/2,12,9.1 文件的概述 9.1.2 文本文件的使用方式”r+,”,rb,”,:读,写方式,打开一个已存在的二进制文件。只能读取数据。,”,wb,”,:,只写方式,打开一个二进制文件。只能写入数据。若文件不存在,则自动建立一个新文件接收写入的数据;若,文件已存在,,则,删除旧文件,,建立一个同名的新文件 ,接收写入的数据。,”,ab,”,:,追加方式,打开一个已存在的二进制文件。只能写入数据并追加在文件尾部。,9.1.2 文本文件的使用方式,2024/9/2,13,”rb”:读写方式9.1.2 文本文件的使用方式2023/9,二进制文件的三种基本使用方式,”,rb+,”:,打开一个已存在的二进制文件。可以读取数据。也可以写入数据。,”,wb+,”:,读写方式,打开一个二进制文件。可以读取数据。也可以写入数据。,若文件不存在,则自动建立一个新文件接收写入的数据;若,文件存在,,则,删除旧文件,,建立一个同名的新文件 ,接收写入的数据。,”,ab+,”:,读写方式,打开一个已存在的二进制文件。可以读取数据。也可以追加数据到文件尾部,。,9.1 文件的概述,9.1.2,文件的打开与关闭,2024/9/2,14,二进制文件的三种基本使用方式9.1 文件的概述 9.1.,9.1 文件的概述,9.1.2,文件的打开与关闭,操作文件的一般步骤,打开文件,读写文件,关闭文件,打开文件,:,建立,用户程序与文件的,联系,,为文件,分 配,一个文件缓冲区。,读写文件,:是指对文件的,读、写、追加,和,定位,操作。,关闭文件,:,切断,文件与程序的,联系,,,释放,文件缓冲 区。,C,语言的输入输出函数库中提供了大量的函数,用于完成对数据文件的建立、数据的读写、数据的追加等操作。,在程序中,调用,这些,函数,时,必须先用,include,命令包含,stdio.h,文件。,2024/9/2,15,9.1 文件的概述9.1.2 文件的打开与关闭操作文件的一般,标准文件,是外部设备中的三个特殊的设备文件。它们的文件指针是系统定义的,并由系统,自动打开和关闭,。这三个标准文件分别是:, 标准输入文件,文件指针为,stdin,,系统指定为,键盘,。, 标准输出文件,文件指针为,stdout,,系统指定为,显示器,。, 标准错误输出文件,文件指针为,stderr,,系统指定为,显示器,,输出错误信息。,9.1 文件的概述,9.1.1,文件和文件指针,4. 标准文件,2024/9/2,16,标准文件是外部设备中的三个特殊的设备文件。它们的文,检查文件打开操作是否成功,if,(,(,fp = fopen(,filename, ,r,),),=,NULL), printf (”Cannot open file.n”);,exit(0);,检查以,只读,方式打开文件名为,filename,的文件是否成功。,exit,函数的作用:,结束程序的执行,,并将实参0作为函数返回值传给操作系统。,9.1 文件的概述,9.1.2,文件的打开与关闭,2024/9/2,17,检查文件打开操作是否成功9.1 文件的概述 9.1.2,常用的调用形式,:,FILE,*,fp;,fclose(,fp,);,fp,:已经打开的文件指针。,9.1 文件的概述,9.1.2,文件的打开与关闭,2.,文件关闭函数,fclose(,),函数功能,:,关闭,fp,指定的文件,释放该文件的缓冲区、,FILE类型变量及文件指针。,若文件关闭成功,则返回,0,;,若文件关闭失败,则返回,非0,值。,2024/9/2,18,常用的调用形式:9.1 文件的概述 9.1.2 文件的打开,FILE *fp; /* */,if(fp=fopen(文件名,文件使用方式)=NULL) /* */, printf(file can not open!n); /* */,exit(0); /* */, /* */,fclose(fp); /* */,2024/9/2,19,FILE *fp; /* */2023/,常用的,调用,形式,:,FILE,*,fp;,fputc(,ch,fp,);,ch,:需要输出的字符,可以是字符常量或字符变量;,fp,:文件指针变量。,对文本文件的读写操作,必须,按,文件中字符的,先后顺序,进行,只能在操作了第,i,个字符之后,才能操作第,i+1,个字符。,在对文件操作时,文件的,读写指针,由系统,自动向后,移动。,9.2 文本文件的读写,9.2.1,文件的字符输入输出函数,1.,字符输出函数,fputc(,)(,或,putc(,),),函数功能,:,将一个字符(ASCII码)写入到,fp,所指向的文件(该文件,必须是以写或读写方式打开的)中。,若输出操作成功,函数返回写入的字符;否则,返回,EOF,。,系统定义的文本文件结束标志,其值为,(-1),。,putc,函数与,fputc,函数的功能相同。在,stdio.h,文件中被定义为,#,define putc(c,f) fputc(c),f),标准文件中用的,putchar,函数是,fputc,函数的特殊用法,它在,stdio.h,文件中被定义为,#,define putchar(c) putc(c),stdout),2024/9/2,20,常用的调用形式: 对文本文件的读写操作,必须按文件中字,常用的,调用,形式,:,FILE,*,fp;,ch,=,fgetc,(,fp,);,ch,:可以是字符变量或整型变量;,fp,:文件指针变量。,9.2 文本文件的读写,9.2.1,文件的字符输入输出函数,2.,字符输入函数,fgetc(,)(,或,getc(,),),函数功能,:,从,fp,所指向的文件(该文件必须是以读或读写方式打开,的)中读取一个字符。,若输入操作成功,函数返回读入的字符;,若文件结束或输入操作失败,则返回,EOF,。,getc,函数与,fgetc,函数的功能相同。在,stdio.h,文件中被定义为,#,define getc(f) fgetc(f),标准文件中用的,getchar,函数是,fgetc,函数的特殊用法,它在,stdio.h,文件中被定义为,#,define getchar( ) getc(stdin),2024/9/2,21,常用的调用形式:9.2 文本文件的读写 9.2.1 文件的,【例9.1】利用fputc和fgetc函数建立一个文本文件,并显示文件中的内容。,#include ,main( ), FILE,*,fp,; /*,定义一个文件指针变量,fp,*/,int c; /* c,为存放字符的变量,*/,char filename40; /* filename,用于存放数据文件名,*/,printf(filename: ); /*,提示输入磁盘文件名,*/,gets(filename);,if (,fp,=fopen(filename,w,)=NULL), printf(Cant open the %sn, filename);,exit(0); ,9.2 文本文件的读写,9.2.1,文件的字符输入输出函数,测试打开文件是否成功,2024/9/2,22,【例9.1】利用fputc和fgetc函数建立一个文本文件,,while (c=getchar( )!=EOF),/*,键盘文件结束标志:输入,Ctrl+z,,显示,Z,后回车,*/,putc(c,fp,); /*,将键盘输入的字符写到文件中,*/,fclose(,fp,); /*,建立文件结束,关闭文件,*/,printf(outfile:n);,fp,=fopen(filename,r,); /*,以读方式打开文本文件,*/,while (c=getc(,fp,)!=EOF) /*,未读到文件结束标志时,*/,putchar(c); /*,在显示器显示读出的字符,*/,fclose(,fp,); /*,读文件结束,关闭文件,*/,9.2 文本文件的读写,9.2.1,文件的字符输入输出函数,2024/9/2,23,while (c=getchar( )!=EOF)9.2,常用的,调用,形式,:,FILE,*,fp;,feof,(,fp,);,fp,:文件指针变量。,9.2 文本文件的读写,9.2.2,文件结束测试函数,函数功能,:,测试,fp,所指向的文件是否已读到文件尾部。,若该文件没有结束,则返回,0,;,若文件结束,则返回,非,0,值。,对文本文件进行读操作时,,例如,fgetc(,),返回,EOF,,,即可作文件结束处理。但在二进制文件中,-1,是,合法数据,,所以系统提供了一个适用对象更普遍的文件结束测试函数,feof,。,2024/9/2,24,常用的调用形式:9.2 文本文件的读写 9.2.2 文件结,例如:复制一个磁盘文件,。,#include ,main(,), FILE,*infp,*,outfp,; char,infile,40,outfile,40;,int,ch,;,printf(,input filename:,); scanf(,%s,infile,);,printf(,output filename:,); scanf(,%s,outfile,);,if(,infp=fopen(infile,r,)=NULL),/* 打开源文件 */,printf(,in,file open error.n,); exit(0);,if(,outfp=fopen(outfile,w,)=,NULL,),/* 打开目标文件 */,printf(,out,file open error.n,); exit(0);,ch=fgetc(infp,);,/* 从源文件中读一个字符 */,while(!,feof,(infp),/* 源文件未读完 */, fputc(ch, outfp); ch=fgetc(infp,); ,/* 复制文件 */,fclose(infp); fclose(outfp,);,9.2 文本文件的读写,9.2.2,文件结束测试函数,2024/9/2,25,例如:复制一个磁盘文件。9.2 文本文件的读写 9.2.2,常用的,调用,形式,:,FILE *,fp;,fputs,(,str,fp,);,str,:需要输出的字符串,可以是字符串常量或字,符串指针;,fp,:文件指针变量。,fputs,与,puts,函数的功能类似,它们的区别:,puts,函数能将字符串的结束标志,0,转换成,n,输出,因此字符串在显示器输出后,光标移至下一行;而,fputs,函数对字符串结束标志,0,的处理仅仅是将其,舍去,。,9.2 文本文件的读写,9.2.3,文件的字符串输入输出函数,1.,字符串输出函数,fputs(,),函数功能,:,将字符串(不包括字符串结束标志0)写到文件指针,fp,所指向的文件中。,若输出操作成功,返回,非0,值,;,若输出操作失败,则返回,0,。,2024/9/2,26,常用的调用形式: fputs与puts函数的功能类似,常用的,调用,形式,:,FILE *,fp;,fgets,(,str,n,fp,);,str,:字符指针,可以是字符数组名或字符指针变量;,n:读取字符个数(n-1)。,fp,:文件指针变量。,9.2 文本文件的读写,9.2.3,文件的字符串输入输出函数,2.,字符串输入函数,fgets(,),函数功能,:,从,fp,所指向的文件中,读取,n-1,个字符后,加上字符串结,束标志,0,组成一个字符串,存入字符数组中。,若输入操作成功,返回字符数组的首地址;,若文件结束或输入操作失败,则返回,NULL,。,从文件读取字符的过程中,如果读到,回车符,(,15,),舍去,,如果读到,换行符,(,12,)仍按字符,读出,,再,加上,0,作为一个字符串,同时,结束文本行读取操作,,函数正常返回。当,读到文件结束,时,直接,加上,0,作为一个字符串,函数正常返回。,fgets,与,gets,函数的区别:,gets,函数,以换行符,作为行,结束标志,,并,舍去,换行符。,fgets,函数也以换行符作为行的读结束标志,但,换行符,同时还,作为字符串的内容,。因此可将含有换行符的文本文件看作是由一行一行字符组成的。,2024/9/2,27,常用的调用形式:9.2 文本文件的读写 9.2.3 文件的,【例,9.3,】应用,fputs,和,fgets,函数,建立和读取文本文件。,#include stdio.h,#include string.h,main( ), FILE *,fp,; /*,定义一个文件指针变量,fp */,char filename40,str81;,printf(filename: ); /*,提示输入磁盘文件名,*/,gets(filename);,if (,fp,=fopen(filename,w,)=NULL),/*,在磁盘中新建并打开一个文本文件,同时测试是否成功,*/, printf(Can t open the %sn,filename);,exit(0);,9.2 文本文件的读写,9.2.3,文件的字符串输入输出函数,2024/9/2,28,【例9.3】应用fputs和fgets函数,建立和读取文本文,while (strlen(gets(str)0),/*,键盘输入空串(即仅输入回车)则输入全部结束,*/, fputs(str,fp,); /*,将键盘输入的字符串写到文件中,*/,fputc(n,fp,); /*,在文件中加入换行符作为字符串分隔符,*/,fclose(,fp,); /*,建立文件结束,关闭文件,*/,printf(outfile:n);,fp,=fopen(filename,r,); /*,以读方式打开文本文件,*/,while (fgets(str,81,fp,)!=NULL),/*,从文件读取字符串并测试文件是否已读完,*/,printf(%s,str); /*,将文件中读取的字符串分行显示,*/,fclose(,fp,); /*,读文件结束,关闭文件,*/,9.2 文本文件的读写,9.2.3,文件的字符串输入输出函数,2024/9/2,29,while (strlen(gets(str)0) 9.,与标准文件的格式输入输出函数,scanf,和,printf,相对应,文本文件也有格式输入输出函数,fscanf,和,fprintf,。,它们的功能和格式基本相同,不同之处在于,scanf,和,printf,的读写对象是终端(键盘和显示器),,fscanf,和,fprintf,的读写对象是磁盘文件。,常用的,调用,形式,:,FILE *,fp;,fprintf,(,fp,格式控制串,输出项参数表,);,fp,:文件指针变量。,格式控制串,和,输出项参数表,的规定和使用方法与printf函数相同。,9.2 文本文件的读写,9.2.4,文件的格式输入输出函数,1.,格式输出函数,fprintf(,),函数功能,:,将输出项按指定格式写入,fp,所指向的文件中。,若输出操作成功,返回,写入的字节数,;,若输出操作失败,则返回,EOF,。,2024/9/2,30,与标准文件的格式输入输出函数scanf和print,常用的,调用,形式,:,FILE *,fp;,fscanf,(,fp,格式控制串,地址表,);,fp,:文件指针变量。,格式控制串,和,地址表,的规定和使用方法与scanf函数相同。,9.2 文本文件的读写,9.2.4,文件的格式输入输出函数,2.,格式输入函数,fscanf(,),函数功能,:,按格式控制串所描述的格式,从,fp,所指向的文件中读取,数据,送到指定的内存地址单元中。,若输入操作成功,返回实际读出的数据项个数,不包括,数据分隔符。若没有读数据项,则返回,0,。,若文件结束或调用失败,则返回,EOF,。,2024/9/2,31,常用的调用形式:9.2 文本文件的读写 9.2.4 文件的,二进制文件,存储信息的形式与,内存,中存储信息的形式是一致的,如果需要在内存与磁盘文件之间频繁交换数据,最好采用二进制文件。,二进制文件一般是,同类型数据,集合,数据之间无分隔符,每个数据所占字节数是一个定值,因此二进制文件除了可以顺序存取外,还可运用定位函数方便地进行随机存取。,常用的,调用,形式,:,FILE *,fp;,putw,(,w,fp,);,w,:要输出的整型数据,可以是常量或变量。,fp,:文件指针变量。,9.3 二进制文件的读写,9.3.1,文件的字输入输出函数,1.,字输出函数,putw(,),函数功能,:,把整型数,w,写入,fp,所指向的文件(,以写方式打开的,二进制文件,)。,若输出操作成功,返回,w,值,;,若输出操作失败,则返回,EOF,。,由于,EOF,(-1),是一个合法的整数,因此应该用,ferror,函数检测函数调用是否出错。,2024/9/2,32,二进制文件存储信息的形式与内存中存储信息的形式是一致,常用的,调用,形式,:,FILE *,fp;,getw,(,fp,);,fp,:文件指针变量。,9.3 二进制文件的读写,9.3.1,文件的字输入输出函数,2.,字输入函数,getw(,),函数功能,:,从,fp,所指向的文件(,以读方式打开的二进制文件,),中读取一个整型数。,若输入操作成功,返回从文件中读取的整数。,若文件结束或调用失败,则返回,EOF,。,EOF,(-1),是,getw,函数可能返回的合法值,所以应该用,feof,函数或,ferror,函数检测文件是否结束或调用失败。,2024/9/2,33,常用的调用形式:9.3 二进制文件的读写 9.3.1 文件,常用的,调用,形式,:,FILE *,fp;,ferror,(,fp,);,fp,:文件指针变量。,9.3 二进制文件的读写,9.3.1,文件的字输入输出函数,3.,文件操作错误函数,ferror(,),函数功能,:,检测文件读写是否出错。,若出错,则指示器,置,1,,否则指示器,置,0,。,函数返回错误指示器值。,说明,:,错误指示器若,置,1,后,只有调用,clearerr,函数或,rewind,函数才能将其,清,0,。,2024/9/2,34,常用的调用形式:9.3 二进制文件的读写 9.3.1 文件,常用的,调用,形式,:,FILE *,fp;,clearerr,(,fp,);,fp,:文件指针变量。,9.3 二进制文件的读写,9.3.1,文件的字输入输出函数,4.,清除错误标志函数,clearerr(,),函数功能,:,将文件的错误指示器和文件结束指示器,清,0,。,该函数无返回值。,2024/9/2,35,常用的调用形式:9.3 二进制文件的读写 9.3.1 文件,【例9.5】应用putw和getw函数建立二进制整型数据文件,并读取其中的数据。,#include stdio.h,main( ), FILE,*,fp,; /*,定义一个文件指针变量,fp */,char filename40; /* filename,用于存放数据文件名,*/,int i,n1=5,n2,x5=10,22,36,48,59,y5;,printf(filename: );,gets(filename);,if (,fp,=fopen(filename,wb,)=NULL),/*,新建并打开一个二进制文件,并测试是否成功,*/, printf(Can t open the %sn,filename);,exit(0);,9.3 二进制文件的读写,9.3.1,文件的字输入输出函数,2024/9/2,36,【例9.5】应用putw和getw函数建立二进制整型数据文件,putw(n1,fp,); /*,向二进制文件写入一个整数,*/,for (i=0; in1; i+),putw(xi,fp,); /*,将,x,数组的,5,个整数写入二进制文件,*/,fclose(,fp,); /*,建立文件结束,关闭文件,*/,printf(outfile:n);,fp,=fopen(filename,rb,); /*,以读方式打开二进制文件,*/,n2=getw(,fp,); /*,从二进制文件读取一个整数,*/,for (i=0; in2; i+), yi=getw(,fp,); /*,从文件读取一个整数赋给y数组元素,*/,printf(%d ,yi);,printf(n);,fclose(,fp,); /*,读文件结束,关闭文件,*/,9.3 二进制文件的读写,9.3.1,文件的字输入输出函数,2024/9/2,37,putw(n1,fp);,常用的,调用,形式,:,fwrite(p, size, n,fp,),;,p,:某类型指针;,size,:某类型数据存储空间的字节数(数据项大小);,n,:此次写入文件的数据项数;,fp,:文件指针变量。,9.3 二进制文件的读写,9.3.2,文件的数据块输入输出函数,1.,数据块输出函数,fwrite(,),函数功能,:,将,p,指向的存储区中,n,个数据项写入,fp,所指向的文件。,若输出操作成功,返回,写入的数据项数,;,若输出操作失败,则返回,0,。,运用数据块输入输出函数可建立整型、实型、结构体类型等各种类型的二进制文件。,2024/9/2,38,常用的调用形式:9.3 二进制文件的读写 9.3.2 文件,常用的,调用,形式,:,fread(p, size, n,fp,),;,p,:某类型指针;,size,:某类型数据存储空间的字节数(数据项大小);,n,:此次从文件中读取的数据项数;,fp,:文件指针变量。,9.3 二进制文件的读写,9.3.2,文件的数据块输入输出函数,2.,数据块输入函数,fread(,),函数功能,:,从,fp,所指向的文件中,读取,n,个数据项,存放到,p,所指向,的存储区域。,若输入操作成功,返回实际读出的数据项个数。,若文件结束或调用失败,则返回,0,。,2024/9/2,39,常用的调用形式:9.3 二进制文件的读写 9.3.2 文件,【例9.6】应用fwrite与fread函数建立一个存放学生电话簿,的二进制数据文件并读取其中的数据。,#include stdio.h,main( ), FILE,*,fp,; int i;,char filename40; /* filename,用于存放数据文件名,*/,struct tel, char name20, tel9; in5, out5;,printf(filename: );,gets(filename);,if (,fp,=fopen(filename,wb,)=NULL), printf(Cant open the %sn,filename);,exit (0);,9.3 二进制文件的读写,9.3.2,文件的数据块输入输出函数,新建并打开一个二进制文件,并测试是否成功,2024/9/2,40,【例9.6】应用fwrite与fread函数建立一个存放学生,for(i=0; i5; i+), printf(name: );,gets(ini.name);,printf(tel: );,gets(ini.tel);,fwrite(in, sizeof(struct tel), 5,fp,); /*,文件中写入5个学生的电话,*/,fclose(,fp,); /*,建立文件结束,关闭文件,*/,printf(outfile:n);,fp,=fopen(filename,rb,); /*,以读方式打开二进制文件,*/,fread(out,sizeof(struct tel),5,fp,); /*,从文件读取5个结构体数据,*/,printf(name telephonen);,for(i=0; i5; i+),printf(%-20s%-8sn,outi.name,outi.tel);,fclose(,fp,); /*,读文件结束,关闭文件,*/,9.3 二进制文件的读写,2024/9/2,41,for(i=0; i5; i+)9.3 二进制文件的读,顺序读写操作,在,顺序读写,文件时,文件的,读写指针,由系统,自动,控制,,每次读写操作后,系统都会将,读写指针,移到下一个数据,的位置。,文件读写操作的内部机制,文件的读写是通过文件系统内部的“,读写指针,”进行的。,当,打开,一个文件时,系统自动为该文件分配的FILE结构体,变量中有一个,读写指针,成员,对该文件的读写操作均通,过,读写指针,进行。,fopen,后,读写指针,指向文件中,第1个,(,将要读写的,)字节。,文件结束,时,,读写指针,指向文件,最后1个字节的后面,。,9.3 二进制文件的读写,9.3.3,文件读写指针定位函数,随机读写操作,通过,改变,文件,读写指针,的指向,可在文件的,任意,位置,进行读写操作。,2024/9/2,42,顺序读写操作文件读写操作的内部机制9.3 二进制文件的,常量标识符 值 起始位置,SEEK_SET 0,文件开始位置,SEEK_CUR 1,文件读写指针当前位置,SEEK_END 2,文件结束位置,函数功能,:,将文件,读写指针,从,base,标识的位置移动,offset,个字节,,并将文件结束指示器,清,0,。,若移动成功,返回,0,;,若移动失败,则返回,非,0,值。,常用的,调用,形式,:,fseek,(,fp,offset, base,),;,fp,:文件指针变量;,offset,:位移量(字节,长整型);,base,:起始位置标志。,9.3 二进制文件的读写,9.3.3,文件读写指针定位函数,1.,文件读写指针移动函数,fseek(,),是,正,数,文件,读写指针,向文件,尾部,方向移动;是,负,数向文件,头部,移动,该函数仅适用于二进制文件。,fseek(fp,30,0,),从文件,开始位置,向文件结束方向移动,30,个字节,fseek(fp,-10,1,),从,当前位置,向文件开始方向移动,10,个字节,fseek(fp,-8,2,),从,文件结束位置,向文件开始方向移动,8,个字节,2024/9/2,43,常量标识符 值 起始位置函数功能:常用的调用,函数功能,:,将文件,读写指针,移到文件开始位置,并将文件结束,指示器和错误指示器,清0,。,该函数无返回值。,常用的,调用,形式,:,rewind,(,fp,),;,fp,:文件指针变量;,9.3 二进制文件的读写,9.3.3,文件读写指针定位函数,2.,文件读写指针回绕函数,rewind(,),该函数适用于二进制文件和文本文件。,2024/9/2,44,函数功能:常用的调用形式:9.3 二进制文件的读写 9.3,函数功能,:,返回,fp,指向的文件中的,读写指针,当前位置,即相对于,文件开始处的,位移量,,单位是字节。,若调用成功,则返回文件读写指针当前值(长整型);,若调用失败,则返回,-1L,。,常用的,调用,形式,:,ftell,(,fp,),;,fp,:文件指针变量;,9.3 二进制文件的读写,9.3.3,文件读写指针定位函数,3.,文件读写指针位置函数,ftell(,),该函数适用于二进制文件和文本文件。,2024/9/2,45,函数功能:常用的调用形式:9.3 二进制文件的读写 9.3,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!