您好,欢迎访问三七文档
第16讲文件第16讲文件本讲主要内容文件概述文件的基本操作打开和关闭文件最基本的文件读写函数文件的数据块读/写操作fread()函数fwrite()函数文件的其他操作文件的格式化读/写文件的随机读/写操作文件的字符串操作第16讲文件教学目标理解文件的概念,了解磁盘文件的分类,掌握ASCII码文件和二进制文件在使用中的异同点。了解文件缓冲区的概念,掌握文件数据类型和文件指针的概念。掌握文件打开和关闭函数的用法。掌握两个最基本的文件读写函数fputc()和fgetc()的用法。掌握文件数据块读写的概念,能使用数据块读写函数fread()和fwrite()进行文件读写操作。了解文件的字符串读写的概念和相关函数。一、文件概述文件的概念程序文件:存储程序代码的文件数据文件:存储数据的文件。设备文件:所有的外部设备均被作为文件对待。对外部设备的输人输出处理就是读写设备文件的过程。输出文件缓冲区:这是一个连接计算机内存数据与外存文件的桥梁,当向文件输出数据时,准备输出的数据先写入文件缓冲区,等该区填满后再输出到文件中。这一过程称为“写文件”,是数据输出过程。输入文件缓冲区:当从文件中输入数据时,也是把读入的数据先写入文件缓冲区,等文件缓冲区数据装满之后再整个送给程序。这一过程称为“读文件”,是数据输入过程。计算机对文件的操作总体上分成输入和输出两大类,对文件的输人输出(I/0)过程是通过操作系统进行管理的。一、文件概述文件的分类按照数据在文件中的存储方式,C语言把文件分为文本文件和二进制文件两类。文本文件:以ASCII码字符形式存储的文件称为文本文件,又叫ASCII文件。例如用高级程序语言编写的程序文件是文本文件。二进制文件:是文件的另一种存储形式,将内存中的数据存入磁盘的时候不需要进行数据转换,它以二进制数据方式存入磁盘。例如C程序的目标文件(扩展名为.obj)和可执行文件(扩展名为exe)都是二进制文件。一、文件概述文本文件和二进制文件的区别有一个整数2501,如果是用二进制的形式表示,2501作为一个int型的常数在内存中存储只需2个字节,直接把十进制整数2501转换为二进制整数就可以了。如果用ASCII形式输出,由于这里涉及到2、5、0、1这四个数字,存储时就要4个字节,每个数字都用ASCII值来表示。整数2501的这两种存储形式如下图所示。000010011100010100110010001101010011000000110001(a)二进制存储(b)ASCⅡ码存储一、文件概述文件的一般操作过程使用文件的一般步骤是:打开文件→操作文件→关闭文件打开文件:建立用户程序与文件的联系,系统为文件开辟文件缓冲区。操作文件:是指对文件的读、写、追加和定位操作。读操作:从文件中读出数据,即将文件中的数据输入到计算机内存。写操作:向文件中写入数据,即将计算机内存中的数据输出到文件。追加操作:将新的数据写到文件原有数据的后面。定位操作:移动文件读写位置指针。关闭文件:切断文件与程序的联系,将文件缓冲区的内容写入磁盘,并释放文件缓冲区。一、文件概述文件的指针数据类型“FILE”在TurboC2.0中的原型定义:typedefstruct{shortlevel;/*fill/emptylevelofbuffer*/Unsignedflags;/*Filestatusflags*/charfd;/*Filedescriptor*/unsignedcharhold;/*Ungetccharifnobuffer*/shortbsize;/*Buffersize*/unsignedchar*buffer;/*Datatransferbuffer*/unsignedchar*curp;/*Currentactivepointer*/unsignedistemp;/*Temporaryfileindicator*/shorttoken;/*Usedforvaliditychecking*/}FILE;/*ThisistheFILEobject*/一、文件概述文件的指针在C语言中,凡是要对已打开文件进行操作,都要通过指向该文件结构的指针。因此,需要在程序中定义FILE型(文件型)的指针变量,并使其指向要操作的文件。文件型指针变量的定义形式如下:FILE*变量名;例如,使用如下语句将定义一个文件结构类型的指针变量p:FILE*p;二、文件的基本操作打开和关闭文件1.文件打开函数fopen()fopen()函数用来实现打开文件,它解决如下3个问题:⑴指定要打开的文件名;⑵指定文件的使用方式,如是读文件还是写文件等;⑶为打开的文件指定一个指针变量,以便使用这个指针变量对文件进行访问。fopen()函数的调用方式通常为:FILE*fp;fp=fopen(文件名,使用文件的方式);例如:fp=fopen(example.txt,r);它表示要打开的文件名为example.c,使用文件的方式是“r”方式,指向文件的指针是fp。二、文件的基本操作打开和关闭文件1.文件打开函数fopen()在程序中使用fopen()打开文件时,通常要检查文件打开的正确性,以便决定程序是否继续向下执行。例如:if((fp=fopen(example.txt,r))==NULL){printf(cannotopenthisfile\n);exit(1);}其中exit()函数的作用停止程序执行,使控制返回操作系统。通常返回值为0时表示正常返回,非0表示非正常返回。二、文件的基本操作打开和关闭文件2.关闭文件函数fclose()fclose()函数的一般格式如下:fclose(文件指针);该函数实现的功能就是关闭“文件指针”所指向的文件,释放打开文件时使用的结构体变量,断开文件指针与文件的联系。如果输出缓存中还有数据,则写入磁盘;如果输入缓存中还有数据,则丢弃。如果操作成功,则其返回值为0,否则,返回值为EOF。“EOF”是在头文件stdio.h中定义的符号常量,其值为-1。例如,我们在前面曾用fopen()函数打开example.txt文件,在打开时指定fp指针指向该文件,因此可使用如下语句将example.txt文件关闭:fclose(fp);二、文件的基本操作最基本的文件读写函数1.Fputc()函数一般形式如下:fputc(ch,fp);其中:ch是要输出的字符。fp是文件指针变量。fputc()函数的作用是将字符(ch的值)输出到fp所指向的文件中,即向指定文件中写入一个字符。如果要向终端输出一个字符,则使用如下形式:fputc(ch,stdout);stdout是标准输出终端设备的文件指针,由系统定义。二、文件的基本操作例15-1使用fputc()函数在屏幕显示一个字符串。includestdio.hmain(){char*p=Thisisaexample.;while(*p!='\0')fputc(*p++,stdout);}二、文件的基本操作例15-2把从键盘输入的一个字符串写入到磁盘文件example.txt中。#includestdio.hmain(){charch;FILE*fp;fp=fopen(example.txt,w);printf(Enterastring:);while((ch=getchar())!='\n')fputc(ch,fp);fclose(fp);}二、文件的基本操作最基本的文件读写函数2.fgetc()函数fgetc()函数的功能是从指定文件读入一个字符,该文件必须是以读或读写方式打开的。通常使用如下的形式调用fgetc()函数:ch=fgetc(fp);其中,fp为文件型指针变量,ch为字符变量。正常情况下fgetc()函数的返回值是从文件中读出的一个字符。二、文件的基本操作例15-3使用fgetc()函数输出例15-2的程序清单。#includestdio.hmain(){charch;FILE*fp;fp=fopen(e1502.c,r);while((ch=fgetc(fp))!=EOF)putchar(ch);fclose(fp);}二、文件的基本操作例15-4把一个文本文件的内容复制到另一个文本文件中。#includestdio.hmain(){charch,source[10],target[10];FILE*fp_s,*fp_t;printf(Enterthesourcefilename:);scanf(%s,source);printf(Enterthetargetfilename:);scanf(%s,target);if((fp_s=fopen(source,r))==NULL){printf(cannotopensourcefile.\n);exit(1);}if((fp_t=fopen(target,w))==NULL){printf(cannotopentargetfile.\n);exit(1);}while(!feof(fp_s))fputc(fgetc(fp_s),fp_t);fclose(fp_s);fclose(fp_t);}三、文件的数据块读写操作文件的数据块读写是指对文件进行读写操作时,一次读写多个字节的数据,C语言提供的操作函数是fread()函数和fwrite()函数。fread()函数从文件中读取一个数据块,fwrite()函数将一个数据块写到文件中。如果文件以二进制形式打开,用fread()和fwrite()函数就可以读写任何类型的信息。三、文件的数据块读写操作fread()函数fread()函数把指定文件中的一个数据块读到内存中,它的一般调用形式如下:fread(buffer,size,count,fp);其中:fp是读取数据的文件指针;buffer是接受文件数据的内存首地址,通常是指针变量名、数组名等;size是一个数据块的字节数(即数据块的大小);count是执行一次fread()函数读取的数据块的数目。例如,设string.txt是一个文本文件,s是长度为60的char型一维数组,则执行如下语句后,将读出string.txt文件中的前10个字符,并依次存储到数组s的前10个元素中:FILE*fp;fp=fopen(string.txt,r);fread(s,2,5,fp);三、文件的数据块读写操作fread()函数#includestdio.hmain(){chars[60];inti;FILE*fp;fp=fopen(string.txt,r);fread(s,2,5,fp);for(i=0;i10;i++)putchar(s[i]);printf(\n);fclose(fp);}三、文件的数据块读写操作fwrite()函数fwrite()函数的功能是把内存中的一些数据块写到指定的文件中,它的一般调用形式如下:fwrite(buffer,size,count,fp);其中:fp是读取数据的文件指针;buffer是数据块的内存首地址,通常是指针变量名、数组名等;size是一个数据块的字节数(即数据块的大小);count是执行一次fwrite()函数从内存输出到fp文件的数据块数目。例如,下面的语句将把内存中结构体数组stud的数据输出到fp指向的文件中:for(i=0;i40;i++)fwrite(&stud[i],sizeof(structstudent_type),1,fp);当然,也可以使用下面的语句,一次就把40个数据输出到文件中:fwrite(stud,sizeof(structstudent_type),40,fp);三、文件的数据块读写操作例15-5从键盘上输入一批学生数据,然后以“stu_list”为文件名存储到磁盘上。#includestdio.h#defineSIZE4structstudent_type{charname[10];intnum;intscore;}stud;ma
本文标题:C语言文件操作
链接地址:https://www.777doc.com/doc-3563494 .html