C语言程序设计第12章 高级语言程序设计C--文件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第十二章文件内容提要文件缓冲型文件的打开、关闭与读写文件I/O文件:就是存储在外部存储介质上的数据的有序集合;存储在磁介质上的文件即使在断电之后,依然能够保存。C语言的源文件存储为*.c文件,经过编译后得到的目标文件存储为*.obj,生成的可执行文件,存储为*.exe文件。C的文件分为两大类,普通文件和设备文件。C对文件的存取是以字符为单位的。11.1文件普通文件保存在外部磁介质上,而把各种外设看成是设备文件。对显示器的输出看成是对设备文件进行写操作键盘的输入看成是设备文件的读操作显示器是标准输出文件,键盘是标准输入文件11.1文件磁介质存储文件文件存储在磁介质上,有的按照ASCII码存储,有的按照二进制编码存储ASCII码文件按照ASCII码进行存储,这种文件能够被人所看懂。ASCII码保存的文件被称为文本文件。如:‘A’保存为65‘a’保存为97‘1’保存为49二进制文件以内存中的二进制编码保存。这些文件人是没办法读懂的11.1文件ASCII码文件如果用ASCII码来保存的话,需要将2009看成占4个字节的字符串。2对应的ASCII码为50二进制表达为001100100对应的ASCII码为48二进制表达为001100000对应的ASCII码为48二进制表达为001100009对应的ASCII码为57二进制表达为00111001二进制文件2009如果用二进制文件保存的话,首先要将2009这个数字转换为二进制数:0000011111011001占两个字节,不足部分补0。11.1文件00110010001100000011000000111001从普通文件读数据时,从磁盘文件中读一批数据到划分出的缓冲区中,然后从缓冲区将数据逐个送入相对应的变量中;向文件写数据时,是先将变量中数据送到缓冲区,在缓冲区满后,将缓冲区内的数据一起存到普通磁盘文件中。11.1文件文件类型指针用一个指针变量指向一个文件,通过对文件指针的操作,来对这个指针所指向的文件进行操作。文件指针声明的一般形式为:FILE*指针变量名;FILE为系统定义的一个结构体,包含文件的各种信息。如:文件名,文件当前位置,文件状态,缓冲区大小等等FILE是包含在stdio.h中11.1文件FILE的定义为:typedefstruct{shortlevel;/*fill/emptylevelofbuffer*/unsignedflags;/*Filestatusflags*/charfd;/*Filedescriptor*/unsignedcharhold;/*Ungetccharifnobuffer*/shortbsize;/*Buffersize*/unsignedchar*buffer;/*Datatransferbuffer*/unsignedchar*curp;/*Currentactivepointer*/unsignedistemp;/*Temporaryfileindicator*/shorttoken;/*Usedforvaliditychecking*/}FILE;11.1文件FILE类型的指针变量声明为:FILE*fp;fp为指针变量,按照结构体中的成员变量所提供的信息,就可以找到文件,对文件进行操作。不必弄清楚FILE的每一个细节,只用声明一个指针变量,指向这内存中划出的FILE结构体变量空间的首地址就可以了11.1文件标准文件标准文件是特殊的设备文件,显示器、键盘和错误输出文件。这些标准文件指针是C定义的,并由C自动打开和关闭。这三个标准文件分别是:标准输入文件,指针为stdin:键盘。标准输出文件,指针为stdout:显示器。标准错误输出文件,指针为stderr:输出错误信息11.1文件操作文件的步骤:打开文件使用(包括读或写)关闭文件11.2缓冲型文件的打开、关闭和读写打开文件实际上就是让文件指针指向一个内存区域,文件的各种信息被调入并存放在这个内存区域中。fopen()函数,文件打开函数,用来以一个特定的打开方式来打开一个文件,一般形式为:FILE*fp;fp=fopen(文件名,文件打开方式);fp为文件指针,这个指针指向FILE结构体变量的首地址。文件名为被打开文件的名字;在名字之前,可以加上路径;文件名,可以是字符数组或者字符串常量。文件打开方式,则是要如何操作文件。11.2缓冲型文件的打开、关闭和读写打开方式:由r(read),w(write),a(append),t(text),b(binary),+,组合而成对文本文件(text)的基本操作:rt(只读文本文件)、wt(只写文本文件)、at(追加文本文件)对二进制文件(binary)的基本操作:rb(只读二进制文件)、wb(只写二进制文件)、ab(追加二进制文件)书写的时候对表达文本文件的t可以省略r表达的是只读方式,以只读方式将文件打开,将文件信息调入内存;若文件打开不成功,则返回NULL。w表达的是只写方式,以只写方式将文本文件打开。若文件不存在,则在磁盘上相应的位置新建一个文件;若文件已存在,则去除掉原来该文件中所有信息,重新往该文件中写入缓冲区信息a表达的是追加方式,以只写方式将文本文件打开。若文件不存在,则返回空值NULL;若文件已存在,在原来的文件数据后,写入缓冲区信息。+的意思是读和写都允许。+经常与这6种方式一起,如:rt+,rb+,w+,等11.2缓冲型文件的打开、关闭和读写关闭文件关闭文件是指的断开指针与文件之间的联系,释放文件缓冲区fclose()函数,文件关闭函数,当文件调用结束后,要使用fclose()函数把文件关闭。一般形式为:fclose(fp);fp为文件指针,这个指针指向FILE结构体变量的首地址。正常关闭的时候将返回0值,而发生错误的时候返回非0。11.2缓冲型文件的打开、关闭和读写fgetc()函数:fgetc()从文件中读取一个字符若操作成功,则返回读入的字符,若操作不成功,或者文件结束,则返回EOF。一般使用方式:charch;FILE*fp;文件以只读或者读写打开之后,ch=fgetc(fp);将fp指针指向的那个文件中的一个字符读出来,赋值给ch,11.2缓冲型文件的打开、关闭和读写从一个已知的文件中读入所有的字符,打印显示到屏幕上#includestdio.hvoidmain(){FILE*fp;charc;charfile[30];printf(inputdirectoryandfile:);gets(file);if((fp=fopen(file,r))==NULL){printf(openerroronreading\n,file);exit(0);}while((c=fgetc(fp))!=EOF)putchar(c);fclose(fp);}11.2缓冲型文件的打开、关闭和读写fputc()函数:往文本文件中写入一个字符若操作成功,则返回写入的字符,若操作不成功,则返回EOF。一般使用方式:fputc(字符,文件指针);将字符写入到文件指针所指的那个文件中去文件必须以只写或者读写或者追加方式打开使用w方式,文件内部指针会从文件头开始,重新写入,使用a方式,则是从已存在的文件尾部,继续写入。11.2缓冲型文件的打开、关闭和读写键盘输入字符串,将字符串记录到指定文本文件中,最后在屏幕上打印出这个文本文件中的内容字符串以回车结束11.2缓冲型文件的打开、关闭和读写#includestdio.hvoidmain(){FILE*fp;charc;charfile[30];printf(inputdirectoryandfile:);gets(file);if((fp=fopen(file,w))==NULL){printf(openerroronwritingin\n);exit(0);}while((c=getchar())!='\n'){fputc(c,fp);}fclose(fp);if((fp=fopen(file,r))==NULL){printf(openerroronreading\n);exit(0);}while((c=fgetc(fp))!=EOF)putchar(c);fclose(fp);}fread()函数与fwrite()函数:fread与fwrite是用来整块的读写数据的。11.2缓冲型文件的打开、关闭和读写fread()函数fread的一般形式为:fread(buffer,size,n,fp);•若操作成功,从fp所指向的文件中,读取n个数据项,存放到buffer指针所指向的内存区域,并且返回读出的数据项个数•若文件结束或操作失败,则返回011.2缓冲型文件的打开、关闭和读写fwrite()函数fwrite的一般形式为:fwrite(buffer,size,n,fp);•若操作成功,则将buffer指针所指向的内存区域中的n个数据项,写入fp所指向的文件中,•若操作失败,则返回011.2缓冲型文件的打开、关闭和读写在EMPLOYEE职工信息系统中,输入数据,保存到文件中去,并且从文件中读出数据11.2缓冲型文件的打开、关闭和读写#includestdio.hvoidmain(){structemployee{intEId;charname[20];chartel[10];floatsalary;}*pemp,*p;FILE*fp1,fp2;floattemp;if((fp1=fopen(c:\\tc\\example.txt,w+))==NULL){printf(openerroronwritingin);exit(0);}printf(inputEId:);scanf(%d,&pemp-EId);printf(inputname:);scanf(%s,pemp-name);printf(inputtel:);scanf(%s,pemp-tel);printf(inputsalary:);scanf(%f,&temp);pemp-salary=temp;11.2缓冲型文件的打开、关闭和读写fwrite(pemp,sizeof(structemployee),1,fp1);fclose(fp1);if((fp2=fopen(c:\\tc\\example.txt,r+))==NULL){printf(openerroronreading);exit(0);}fread(p,sizeof(structemployee),1,fp2);printf(newemployee'sdetail:\n);printf(Eid\tname\ttel\t\tsalary\n);printf(%d\t%s\t%s\t%.2f\n,p-EId,p-name,p-tel,p-salary);fclose(fp2);}fprintf函数与fscanf函数fprintf函数与fscanf函数实际上与printf,scanf很相似不同的是scanf与printf是从键盘和屏幕进行读写,而fscanf,fprintf则是对普通文件进行操作。scanf和fprintf的格式字符控制符,与scanf,printf的格式控制符相同。11.3文件的I/Ofprintf函数fprintf的一般使用形式:fprintf(文件指针,格式控制符,输入表);若操作成功,则将输出项按照制定格式写入文件指针所指向的文件中,并且返回写入的字节数。若操作不成功,则返回EOF11.3文件的I/Ofscanf函数fscanf的一般使用形势:fscanf(文件指针,格式控制符,输入表);若操作成功,则从文件指针所指向的文件中读取数据,送到指定的内存地址中,并且返回实际读出的数据项个数,若没有读取数据项则返回0。若操作不成功,或者文件结束,则返回EOF。11.3文

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功