您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 重庆出版社出版,李勇主编的大一C语言课程ppt第10章
C程序设计第10章文件•教学要求:通过本章的教学,读者必须掌握C语言文件的基本知识及其使用方法。学会文件的操作,并熟悉几个常用的文件处理函数。•教学提示:文件是C语言中的一个重要的逻辑概念,操作复杂,是编制应用程序必须掌握的知识。本章主要介绍文件的相关知识及其使用方法,重点介绍文件的编制和读写方法,具体的是对文件操作函数的使用。•教学内容:本章首先介绍了文件的类型,然后讲解了文件的打开与关闭操作,通过若干例子详细讲解了与文件相关的读写函数的具体使用方法。C程序设计第10章文件•10.1文件概述10.1.1文件及文件名文件(file)是程序设计中一个重要的概念。所谓“文件”一般指存储在外部介质上数据的集合。一批数据是以文件的形式存放在外部介质(如磁盘)上的。操作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。要向外部介质上存储数据也必须先建立一个以文件名为标识的文件,才能向它输出数据。为标识一个文件,每个文件都必须有一个文件名,其一般结构为:主文件名[.扩展名]。文件命名规则,遵循操作系统的约定。C程序设计第10章文件10.1.2文件分类根据用户的角度,文件可分为普通文件和设备文件两种。根据文件的内容,可分为程序文件和数据文件,程序文件又可分为源文件、目标文件和可执行文件。根据文件的组织形式,可分为顺序存取文件和随机存取文件。根据文件的存储形式,可分为ASCII码文件和二进制文件。–ASCII文件又称文本(text)文件,它的每一个字节放一个ASCII代码,代表一个字符。–二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。C程序设计第10章文件10.1.3构成文件的基本单元与流式文件一个C语言文件是一个字节流或二进制流。它把数据看作是一连串的字符(字节),而不考虑记录的界限。换句话说,C语言中文件并不是由记录(record)组成的(这是和PASCAL或其他高级语言不同的)。在C语言中对文件的存取是以字符(字节)为单位的。输入输出的数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制。也就是说,在输出时不会自动增加回车换行符以作为记录结束的标志,输入时不以回车换行符作为记录的间隔,我们把这种文件称为流式文件。C语言允许对文件存取一个字符,这就增加了处理的灵活性。C程序设计第10章文件10.1.4ANSIC的缓冲文件系统缓冲文件系统是指系统自动地在内存区为每一个正在使用的文件名开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后从缓冲区逐个地将数据送到程序数据区(给程序变量)。C程序设计第10章文件所谓“非缓冲文件系统”是指系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。在UNIX系统下,用缓冲文件系统来处理文本文件,用非缓冲文件系统处理二进制文件。用缓冲文件系统进行的输入输出又称为高级(或高层)磁盘输入输出(高层I/O),用非缓冲文件系统进行的输入输出又称为低级(低层)输入输出系统。1983年ANSIC标准决定不采用非缓冲文件系统,而只采用缓冲文件系统。即既用缓冲文件系统处理文本文件,也用它来处理二进制文件。也就是将缓冲文件系统扩充为可以处理二进制文件。C程序设计第10章文件•10.2文件的打开与关闭10.2.1缓冲型文件类型缓冲文件类型指针–缓冲文件系统中,关键的概念是“文件指针”。每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等)。这些信息是保存在一个结构体类型的变量中的。该结构体类型是由系统定义的,取名为FILE。有的C语言版本在stdio.h文件中有以下的文件类型定义:typedefstruct{int_fd,_Fd;/*文件号*/int_cLEFt;/*缓冲区中剩下的字符*/int_modE;/*文件操作模式*/int_nExtc;/*下一个字符位置*/int_buFF;/*文件缓冲区模式*/}FILE;C程序设计第10章文件缓冲型文件的打开与关闭–缓冲型文件的打开fopen函数»功能:ANSIC规定了标准输入输出函数库,用fopen函数来实现打开文件。»语句形式:fopen函数的调用方式通常为:»FILE*fp;»fp=fopen(文件名,使用文件方式);»其中,“文件指针名”必须是被说明为FILE类型的指针变量,“文件名”是被打开文件的文件名,“文件名”是字符串常量或字符串数组。“使用文件方式”是指文件的类型和操作要求。C程序设计第10章文件»使用文件方式C程序设计第10章文件–缓冲型文件的关闭fclose函数»在使用完一个文件后应该关闭它,以防止它再被误用。“关闭”就是使文件指针变量不指向该»文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作。除非再次打开,使该指针变量重新指向该文件。»用fclose函数关闭文件。fclose函数调用的一般形式为»fclose(文件指针);»例如:»fclose(fp);»用fopen()函数打开文件时所带回的指针赋给了fp,该语句把该文件关闭。即fp不再指向该文件。C程序设计第10章文件10.2.2非缓冲型文件类型缓冲输入输出系统又称高级磁盘输入输出系统。非缓冲输入输出系统又称为低级磁盘输入输出系统,系统不为这类文件自动提供文件缓冲区,程序设计者必须自己设定一个缓冲区并考虑如何使用它们。非缓冲文件系统提供了一些输入输出函数,用于对这类文件进行输入输出操作。缓冲文件系统(高级I/O系统)是有文件指针的,通过文件指针访问文件,而非缓冲文件系统(低级磁盘I/O系统)则没有文件型指针,不是靠文件指针来访问文件,而是用一个整数代表一个文件(相当于FORTRAN等语言的“文件号”),这个整数称为“文件说明符”。C程序设计第10章文件open函数–功能:用来打开一个非缓冲文件。–语句形式:–open(文件名,打开方式)–说明:打开方式指该文件打开后的工作方式,即读/写方式。C程序设计第10章文件close函数–功能:用来关闭已打开的文件。–语句形式:–close(fd);–说明:fd为整型变量,它是“文件说明符”(即文件号)。在打开文件时,open函数返回一个整数,这就是“文件说明符”(文件号)。在未关闭此文件之前,此文件说明符与该文件相联系,或者说它代表一个确定的文件。执行close函数后,文件号释放,它不再与一个确定的文件相联系。它可以再被用来与另一文件相联系。文件号是由系统在打开文件时分配的,而不是由程序设计者指定的。每一个C语言编译系统规定了可以同时打开的文件时的最大数目。C程序设计第10章文件•10.3文件的读写函数文件打开后,最常见的操作就是读取和写入。C语言提供多种对文件的读取和写入的函数,这里主要介绍四种常用文件的读写操作函数,它们都是在头文件stdio.h定义的:按字符读写的函数fputc、fgetc;按字符串读写的函数fgets、fputs;按格式要求读写的函数fprintf、fscanf;按数据块读写的函数fread、fwrite。C程序设计第10章文件10.3.1字符读写的函数fputc函数–函数fputc的作用是向文件写入一个字符。–用法:intfputc(intc,FILE*fp);–功能:输出一个字符到fp指定的文件中,成功是返回所写字符,出错时返回EOF。–例如:fputc('A',fp);–fp为一个文件类型指针变量,上式将字符常量'A'(也可以是字符型变量)写入文件当前位置,并且使文件位置指针下移一个字节。如果写入操作成功,返回值使该字符,否则返回EOF。C程序设计第10章文件fgetc函数–函数fgetc的作用是从一个文件中读取一个字符。–用法:intfgetc(FILE*fp);–功能:从fp指定的文件中读取下一个字符。成功时返回读取的字符,出错或至文件结束时返回EOF。–例如:a=fgetc(fp);–fp为一个文件类型指针变量,函数fgetc(fp)不仅返回文件当前位置的字符将其赋给变量a,并且使文件位置指针下移一个字符。如果遇到文件结束,则返回值为文件结束标志EOF,该功能常用于判定是否已经到了文件的末尾。C程序设计第10章文件按字符串读写的函数fputs函数–函数fputs的作用是向文件写入一个字符串。–用法:intfputs(char*str,FILE*fp);–功能:把字符串str输出到fp指定的文件中,写入文件成功,函数返回0,出错时返回EOF。提示:–字符串的结束标志’\0’不写入。–例如:fputs(Hello,fp);–fp为一个文件类型指针变量,上式将字符串中的字符H、e、l、l、o写入文件指针的当前位置。C程序设计第10章文件fgets函数–函数fgets的作用是从一个文件中读取一个字符串。–用法:char*fgets(char*buf,intn,FILE*fp);–功能:从fp指定的文件中读取一个长度为n-1的字符串,存入起始地址为buf的内存空间中。–例如:fgets(str,n,fp);–其作用是从fp指向的文件的当前位置开始读取n-1个字符,并加上字符串结束标志’\0’一起放入字符数组str中。如果从文件读取字符时遇到换行符或文件结束标志EOF,读取结束,函数返回值为字符数组str的首地址。C程序设计第10章文件10.3.3按格式要求读写的函数fprintf函数–函数fprintf的作用与fprintf相似,只是输出对象不是标准输出设备而是文件(可以将printf看作fprintf的一个特例,它的输出对象是唯一的标准输出文件stdout,即显示器),即按照格式要求将数据写入文件。–用法:intfprintf(FILE*fp,char*format,argument,…);–功能:将格式串format中的内容原样输出到所指定的文件中,每遇到一个%,就按规定的格式,依次输出一个表达式argument的值到fp所指定的文件中,返回成功输出的项数,出错时返回EOF。–例如:fprintf(fp,%ld,%s,%5.1f,num,name,score);–它的作用时将变量num、name、score按照%ld、%s、%5.1f的格式写入fp指向的文件的当前位置。比较一下语句printf(%ld,%s,%5.1f,num,name,score);可见fprintf函数只是在printf的基础上增加了一个文件指针。C程序设计第10章文件fscanf函数–函数scanf通过标准输入设备读取数据。同样,函数fscanf按照格式要求从文件中读取数据。–用法:intfscanf(FILE*fp,char*format,address,…);–功能:从fp所指定的文件中按format规定的格式输入数据,并把输入的数据依次存入对应的地址address中,返回输入数据个数。–例如:fscanf(fp,%ld,%s,%5.1f,&num,name,&score);–它的作用是从fp指向的文件的当前位置开始,按照%ld、%s、%5.1f的格式取出数据,赋给变量num、name和score。C程序设计第10章文件10.3.4按数据块读写的函数fwrite函数–函数fwrite的作用是将成批的数据块写入文件。–用法:intfwrite(void*buf,intsize,intn,FILE*fp);–功能:将buf指向的内存区中长度为size的n个数据写入fp文件中,返回写到fp文件中的数据项个数。–例如:已知structstudent类型的数组stu[20],则语句fwirte(&stu[1],sizeof(structstudent),2,fp);从结构体数组元素stu[1]存放的地址开始,以一个结构体struct
本文标题:重庆出版社出版,李勇主编的大一C语言课程ppt第10章
链接地址:https://www.777doc.com/doc-3447359 .html