《《C语言程序设计》第9章文件操作.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计》第9章文件操作.ppt(20页珍藏版)》请在三一办公上搜索。
1、第9章 文件操作,本章要求:,掌握C语言中文件的概念;理解以不同方式打开文件的含义;掌握文件的各种操作函数,能正确对文件进行读写数据操作。,本章难点:掌握文件的各种操作函数,能正确对文件进行读写数据操作。,本章重点:掌握文件的各种操作函数,能正确对文件进行读写数据操作。,9.1 文件系统的概念,9.1.1 C文件概述所谓“文件”一般指存储在外部介质上数据的集合。C语言把文件看作一个字节序列,即由一连串的字节组成,称为“流(stream)”,以字节为单位访问,没有记录的界限。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。,按文件中数据的
2、组织形式来分:,文本文件每一个字节存放一个ASCII码,代表一个字符。由文本行组成,并以换行符n结尾,有文件结束标志。二进制文件把数据按其在内存中的存储形式原样存放在磁盘上,一个字节并不对应一个字符。例:,整数1234内存存储形式,二进制形式,ASCII形式,特点:存储量大、速度慢、便于对字符操作,特点:存储量小、速度快、便于存放中间结果,9.1.2缓冲文件系统,C语言使用的文件系统分为缓冲文件系统(标准I/O)和非缓冲文件系统(系统I/O)。ANSI C 标准不再采用非缓冲文件系统。本章主要介绍缓冲文件系统中文件的操作。,9.2 文件的打开与关闭,文件操作的过程:对磁盘文件的操作必须“先打开
3、,后读写,最后关闭”。9.2.1 文件类型指针 在操作文件时,C语言利用一个结构体类型的变量存放文件的信息。该变量的结构体类型由系统取名为FILE。用一个指针变量指向指向存放该文件信息的结构体类型变量,这个指针称为文件指针。定义形式:FILE*指针变量标识符;,对文件操作需要#include,9.2.2 文件的打开,一般形式为:文件指针名=fopen(文件名,使用文件方式);其中:“文件指针名”是指向FILE类型的指针变量。“文件名”是被打开文件的文件名,可以是字符串常量或字符数组。“使用文件方式”是指文件的类型和操作要求。例如:FILE*fp;fp=fopen(c:tcsource.dat,
4、r);,注意反斜杠的表示方法,见下表,说明:,打开方式带上“b”表示是对二进制文件进行操作。带上“+”表示既可以读,又可以写,而对待文件存在与否的不同处理则按照“r”、“w”、“a”各自的规定。若打开失败,fopen都返回一个空指针NULL。文件打开可能出现的错误有:试图以“读”方式(带“r”的方式)打开一个并不存在的文件。新建文件,而磁盘上没有足够的剩余空间或磁盘被写保护。试图以“写”方式,打开“只读”文件。,带“w”或“a”或“r+”或“rb+”方式,FILE*fp;fp=fopen(c:tcsource.dat,r);/*此处开始对文件读*/若打开失败,fp指针变量里面是空指针NULL,
5、对空指针的读写操作会出错。,为避免因上述原因的出错,常用以下的方法来打开一个文件:if(fp=fopen(c:myfile.dat,w+)=NULL)printf(This file could not be opened!n);else/*此处编写对文件读写的代码*/,9.2.3 文件的关闭(fclose函数),文件使用完后,为确保文件中的数据不丢失,都要使用文件的关闭函数fclose进行关闭,其调用形式:fclose(文件指针变量);功能:关闭一个由fopen()函数打开的文件。例如:fclose(fp);前面例子中,把fopen函数返回的指针赋值给fp,现在用fclose函数使文件指针f
6、p与文件脱离,同时刷新文件输入输出缓冲区。,9.3 文件的读写,打开文件后都会返回该文件一个文件类型指针(fp),程序中就是通过这个指针执行对文件的读和写。在语言中提供了多种文件读写的函数:字符读写函数:fgetc和fputc字符串读写函数:fgets和fputs数据块读写函数:fread和fwrite格式化读写函数:fscanf和fprinf上面的文件读写函数均是指顺序读写,即读写了一条信息后,文件读写位置指针自动指向下一个读写单元。,“r”方式,“w”方式,“a”方式,内容,注意区别文件指针,读文件时注意不要超过文件末尾:对于文本文件,由于它的结束标记是EOF(即-1)因此可通过读取的字符
7、是不是结束标志来判断。对于二进制文件,由于没有EOF的结束标志,使用系统提供的feof()函数来判断feof()的使用格式是:feof(fp);其中,fp是文件指针变量,如果文件读取结束则返回非0值,没结束返回0。while(!feof(fp)/*此处写入读操作语句*/文本文件也可使用feof()函数按上面来的形式来判断是否读取结束。,9.3.2字符读写函数,1字符读函数fgetc()功能是从指定的文件中读一个字符,函数调用的一般形式为:字符变量=fgetc(文件指针);例如:ch=fgetc(fp);,FILE*fp;char ch;fp=fopen(9-1.txt,r);while(!fe
8、of(fp)ch=fgetc(fp);putchar(ch);,例:显示指定文件中的内容,2字符写函数fputc()将一个字符写入到文件中,调用的一般格式如下:fputc(ch,fp);fputc函数也有返回值,若写操作成功,则返回一个向文件所写字符的值;否则返回EOF,表示写操作失败。,fp=fopen(9-1.txt,w);fputc(A,fp);,fp=fopen(9-1.txt,a);fputc(A,fp);,在e盘新建文件abc.txt,在其中写入26个大写字母,每行10个字母,例:while(ch=fgetc(fp1)!=EOF),9.3.3 字符串读写函数,1字符串读函数fget
9、s():fgets(字符数组名,n,文件指针);其功能是:从指定的文件中读一个字符串到字符数组中。从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志0。注意:fgets函数从文件中读取字符直到遇见回车符或EOF为止,或直到读入了所限定的字符数(至多n-1个字符)为止,例如:fgets(str,n,fp);函数读成功返回str指针;失败返回一个空指针NULL。,2字符串写函数fputs():fputs(字符串,文件指针);将指定的字符串写到文件中,如:fputs(China,fp);函数返回0时,表明操作成功;返回非0时,表明写操作失败。,9.3.4 格式读写函数,1
10、.格式化读函数fscanf()fscanf(文件指针,“格式字符串”,输入列表);2.格式化写函数fprintf()fprintf(文件指针,“格式化字符串”,输出列表);对比scanf()函数和printf()函数,从键盘输入:scanf(“%d”,在屏幕上打印:printf(“%d”,a);在文件中写入:fprintf(fp,“%d”,a);,s1.txt文件中存放着一些学生分数,统计及格人数,并把结果写入s2.txt文件,9.3.5 数据块读写函数,1.写数据块函数fwrite()fwrite(buffer,size,count,fp);如:int xa10=1,2,3,4,5,6,7,8,9,10;将数组整体写入文件中的语句:fwrite(xa,20,1,fp);2.读取数据块函数fread()fread(buffer,size,count,fp);如:float a5;fread(a,4,5,fp);从文件中每次读4个字节(一个实数)送入实数组a中,连续读5次。,