资源描述:
《第11章-文件ppt课件(全)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
第11章文件
1文件概述文件分类文件常用操作常用的文件处理函数本章教学内容2
2本章教学目标熟练掌握文件的概念、分类、处理方法。熟练掌握文件类型指针的使用。熟练掌握文件的打开函数与关闭函数的使用。熟练掌握文件读写函数的使用。了解文件定位函数和文件测试结束函数的使用,以及文件其他函数的使用。3
311.1文件的概述文件是数据存储形式,日常工作中,如编写一个文档、编写一个程序,都是以文件形式保存到磁盘上,需要时从文件读取信息,“文件”一般指存储在外部介质上的数据集合。操作系统是以文件为单位对数据进行管理的,如果想找存储在外部介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据到内存。向外部介质上存储数据必须先建立一个以文件名为标识的文件,才能将内存中的数据输出到文件。为标识一个文件,每个文件都必须有一个文件名,其一般结构为:主文件[.扩展名],如abc.txt表示文件名为abc,文件扩展名为txt。4
411.1.1文件的分类1.从用户的角度看从用户的角度看,文件分为普通文件和设备文件。普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集。设备文件是与主机相联的各种外部设备,如显示器、打印机、键盘等。2.根据文件的内容根据文件的内容,可分为程序文件和数据文件。3.根据文件的组织形式根据文件的组织形式,可分为顺序存取文件和随机存取文件。4.根据文件的存储形式根据文件的存储形式,可分为ASCII码文件和二进制文件。5
511.1.2文件的缓冲区文件有两种处理方法:缓冲文件系统和非缓冲文件系统1.缓冲文件系统在缓冲文件系统中,系统自动在内存中为每个正在使用的文件开辟一个缓冲区,缓冲区相当于一个中转站,缓冲区的大小由各个具体的C编译系统确定,其大小一般为512字节。文件的存取都是通过缓冲区进行的,从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘。如果从磁盘向计算机读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量),设置缓冲区可以减少对磁盘的实际访问(读/写)次数,提高程序执行的速度,但是占用了一块内存空间。6
611.1.2文件的缓冲区2.非缓冲文件系统在非缓冲文件系统中,数据存取直接通过磁盘,并不会先将数据放到一个较大的空间。系统不会自动地为所打开的文件开辟缓冲区,缓冲区的开辟是由程序完成。在老版本的C中,缓冲文件系统用于处理文本文件,而非缓冲文件系统原来用于处理二进制文件。通过扩充缓冲文件系统,ANSIC使缓冲文件系统既能处理文本文件,又能处理二进制文件。因此,ANSIC只采用缓冲文件系统,而不再使用非缓冲文件系统。本章中所指的文件系统都默认为缓冲文件系统。7
711.1.3文件类型的指针缓冲文件系统中,关键的概念是“文件指针”,缓冲文件系统通过文件指针访问文件。每个被使用的文件都在内存中开辟一个缓冲区,用来存放文件的有关信息,如文件名、文件状态和文件当前位置等信息。FILE是系统定义的一个结构体类型,VC中对FILE结构的定义放在stdio.h文件中,定义如下:struct_iobuf{char*_ptr;//文件输入的下一个位置int_cnt;//当前缓冲区的相对位置char*_base;//指基础位置(即是文件的起始位置)int_flag;//文件标志int_file;//文件的有效性验证int_charbuf;//检查缓冲区状况,如果无缓冲区则不读取int_bufsiz;//文件的大小char*_tmpfname;//临时文件名};typedefstruct_iobufFILE;8
811.2文件的常用操作11.2.1文件的打开与关闭1.文件的打开函数:fopen函数格式:FILE*fopen(char*filename,char*mode);函数功能:字符串filename代表需要被打开文件的名称;字符串mode则用来指定文件类型和操作要求。文件顺利打开后,返回指向该文件流的文件指针。打开失败则返回NULL。例如:FILE*fp;fp=fopen("c:\\data1.txt","rt");9
911.2.1文件的打开与关闭2.文件的关闭函数:fclose函数格式:intfclose(FILE*fp);函数功能:关闭fp所指向的文件流。如果文件流成功关闭,返回0,否则返回EOF(符号常量,其值为-1)。11.2文件的常用操作10
1011.2.2文件的读写当文件被打开之后,最常见的操作就是读取和写入。在程序中,当调用输入函数从外部文件中输入数据赋给程序中的变量时,这种操作称为读操作。当调用输出函数把程序中变量的值或程序运行结果输出到外部文件中,这种操作称为写操作1.字符读写函数:fgetc和fputc。函数格式:intfputc(intn,File*fp);函数功能:将字符ch(ASCAII码n)写到文件指针fp所指向文件的当前位置指针处。若成功时返回所写字符,出错时返回EOF。例题11-1,例题11-2。11
112.字符串读写函数:fgets和fputs函数格式:intfputs(constchar*str,FILE*fp);函数功能:向文件指针fp所指向文件的当前位置指针处写入起始地址为str的字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回为一个非负整数,否则返回EOF。例题11-3。11.2.2文件的读写12
1211.2.2文件的读写3.数据块读写函数:fread和fwrite函数格式:intfwrite(void*buf,intsize,intcount,FILE*fp);函数功能:将buf指向的内存区中长度为size的count个数据写入fp文件中,返回写到fp文件中数据块的数目。例如:fwrite(buf,4,6,fp);表示从首地址为buf的内存单元中,每次取4个字节,连续取6次,写到文件指针fp所指向文件的当前位置指针处。例题11-4,例题11-5。13
1311.2.2文件的读写4.格式化读写函数:fscanf和fprintf函数格式:intfprintf(FILE*fp,char*format,argument,...);函数功能:将格式串format中的内容原样输出到指定的文件中,每遇到一个%,就按照规定的格式依次输出一个表达式argument的值到fp所指定的文件中。如果成功返回输出的项数,如果出错则返回EOF(-1)。例如:fprintf(fp,"%d,%6.2f",i,s);表示将整型变量i和实型变量s分别以%d和%6.2f的格式保存到fp所指向的文件中,两个数据之间用逗号隔开;若i的值为3,s的值为4,则fp所指向的文件中保存的是3,4.00。14
141.文件头重返函数:rewind函数格式:voidrewind(FILE*fp);函数功能:将文件内部的位置指针重新指向fp所指文件的开头。2.位置指针移动函数:fseek函数格式:intfseek(FILE*fp,longoffset,intfromwhere);函数功能:函数设置文件指针fp的位置。如果执行成功,fp将指向以fromwhere(偏移起始位置:文件头0,当前位置1,文件尾2)为基准,偏移offset(指针偏移量)个字节的位置。成功,返回0,失败返回-1。例题11-6。11.2.3文件的定位15
1511.2.3文件的定位3.获取当前位置指针函数:ftell函数格式:longftell(FILE*fp);函数功能:得到当前位置指针相对于文件头偏移的字节数,出错时返回-1L。利用函数ftell()也能方便地知道一个文件的长。如以下语句序列:fseek(fp,0L,SEEK_END);len=ftell(fp)+1;首先将文件的当前位置移到文件的末尾,然后调用函数ftell()获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。16
1611.2.4文件的其他操作1.测试文件结束函数:feof函数格式:intfeof(FILE*stream);函数功能:在程序中判断被读文件是否已经读完,feof函数即适用于文本文件,也适用于二进制文件对于文件结束的判断。feof函数根据最后一次“读操作的内容”来确定文件是否结束。如果最后一次文件读取失败或读取到文件结束符则返回非0,否则返回0。2.重定向文件流函数:freopen函数格式:FILE*freopen(char*filename,char*mode,FILE*fp);函数功能:重定向文件指针。先关闭fp指针所指向的文件,并清除文件指针fp与该文件之间的关联,然后建立文件指针fp与文件filename之间的关联。此函数一般用于将一个预定义的指针变量stdin、stdout或stderr与指定的文件关联。如果成功则返回fp,否则返回NULL。例题11-7。17
17谢谢!