C语言程序设计高级语言程序设计C文件

上传人:大米 文档编号:570884206 上传时间:2024-08-07 格式:PPT 页数:35 大小:145KB
返回 下载 相关 举报
C语言程序设计高级语言程序设计C文件_第1页
第1页 / 共35页
C语言程序设计高级语言程序设计C文件_第2页
第2页 / 共35页
C语言程序设计高级语言程序设计C文件_第3页
第3页 / 共35页
C语言程序设计高级语言程序设计C文件_第4页
第4页 / 共35页
C语言程序设计高级语言程序设计C文件_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《C语言程序设计高级语言程序设计C文件》由会员分享,可在线阅读,更多相关《C语言程序设计高级语言程序设计C文件(35页珍藏版)》请在金锄头文库上搜索。

1、第十二章第十二章文件内容提要内容提要文件文件缓冲型文件的翻开、关闭与读写缓冲型文件的翻开、关闭与读写文件文件I/O l文件:就是存储在外部存储介质上的数据的有序集合;文件:就是存储在外部存储介质上的数据的有序集合;存储在磁介质上的文件即使在断电之后,依然能够保存。存储在磁介质上的文件即使在断电之后,依然能够保存。lC语言的源文件存储为语言的源文件存储为*.c文件,经过编译后得到的目标文件,经过编译后得到的目标文件存储为文件存储为*.obj,生成的可执行文件,存储为,生成的可执行文件,存储为*.exe文文件。件。lC的文件分为两大类,普通文件和设备文件。的文件分为两大类,普通文件和设备文件。C对

2、文件对文件的存取是以字符为单位的。的存取是以字符为单位的。 11.1 文件l普通文件保存在外部磁介质上,而把各种外设看成是设普通文件保存在外部磁介质上,而把各种外设看成是设备文件。备文件。l对显示器的输出看成是对设备文件进行写操作对显示器的输出看成是对设备文件进行写操作l键盘的输入看成是设备文件的读操作键盘的输入看成是设备文件的读操作l显示器是标准输出文件显示器是标准输出文件,键盘是标准输入文件键盘是标准输入文件 11.1 文件l磁介质存储文件磁介质存储文件l文件存储在磁介质上,有的按照文件存储在磁介质上,有的按照ASCII码存储,有的按照二进码存储,有的按照二进制编码存储制编码存储lASCI

3、I码文件码文件l按照按照ASCII码进行存储,这种文件能够被人所看懂。码进行存储,这种文件能够被人所看懂。ASCII码保码保存的文件被称为文本文件。存的文件被称为文本文件。l如:如:A保存为保存为65la保存为保存为97l1保存为保存为49l二进制文件二进制文件l以内存中的二进制编码保存。这些文件人是没方法读懂的以内存中的二进制编码保存。这些文件人是没方法读懂的 11.1 文件 lASCII码文件码文件l如果用如果用ASCII码来保存的话,需要将码来保存的话,需要将2021看成占看成占4个字节的字符串。个字节的字符串。l2对应的对应的ASCII码为码为50二进制表达为二进制表达为0011001

4、0l0对应的对应的ASCII码为码为48二进制表达为二进制表达为00110000l0对应的对应的ASCII码为码为48二进制表达为二进制表达为00110000l9对应的对应的ASCII码为码为57二进制表达为二进制表达为00111001ll二进制文件二进制文件l2021如果用二进制文件保存的话,首先要将如果用二进制文件保存的话,首先要将2021这个数字转换为二进制这个数字转换为二进制数:数:0000011111011001l占两个字节,缺乏局部补占两个字节,缺乏局部补0。 11.1 文件00110010001100000011000000111001 l从普通文件读数据时,从磁盘文件中读一批数

5、据到划分从普通文件读数据时,从磁盘文件中读一批数据到划分出的缓冲区中,然后从缓冲区将数据逐个送入相对应的出的缓冲区中,然后从缓冲区将数据逐个送入相对应的变量中;变量中;l向文件写数据时,是先将变量中数据送到缓冲区,在缓向文件写数据时,是先将变量中数据送到缓冲区,在缓冲区满后,将缓冲区内的数据一起存到普通磁盘文件中。冲区满后,将缓冲区内的数据一起存到普通磁盘文件中。 11.1 文件 l文件类型指针文件类型指针l用一个指针变量指向一个文件,通过对文件指针的操作,用一个指针变量指向一个文件,通过对文件指针的操作,来对这个指针所指向的文件进行操作。来对这个指针所指向的文件进行操作。文件指针声明的一般形

6、式为:文件指针声明的一般形式为:FILE*指针变量名指针变量名;lFILE为系统定义的一个结构体,包含文件的各种信息。为系统定义的一个结构体,包含文件的各种信息。如:文件名,文件当前位置,文件状态,缓冲区大小等如:文件名,文件当前位置,文件状态,缓冲区大小等等等lFILE是包含在是包含在中中 11.1 文件 lFILE的定义为:的定义为:typedefstructshortlevel;/*fill/emptylevelofbuffer*/unsignedflags;/*Filestatusflags*/charfd;/*Filedescriptor*/unsignedcharhold;/*Un

7、getccharifnobuffer*/shortbsize;/*Buffersize*/unsignedchar*buffer;/*Datatransferbuffer*/unsignedchar*curp;/*Currentactivepointer*/unsignedistemp;/*Temporaryfileindicator*/shorttoken;/*Usedforvaliditychecking*/FILE; 11.1 文件 lFILE类型的指针变量声明为:类型的指针变量声明为:FILE*fp;fp为指针变量,按照结构体中的成员变量所提供的信息,为指针变量,按照结构体中的成员变量

8、所提供的信息,就可以找到文件,对文件进行操作。就可以找到文件,对文件进行操作。l不必弄清楚不必弄清楚FILE的每一个细节,只用声明一个指针变量,的每一个细节,只用声明一个指针变量,指向这内存中划出的指向这内存中划出的FILE结构体变量空间的首地址就可结构体变量空间的首地址就可以了以了 11.1 文件 l标准文件标准文件l标准文件是特殊的设备文件,显示器、键盘和错误输出标准文件是特殊的设备文件,显示器、键盘和错误输出文件。这些标准文件指针是文件。这些标准文件指针是C定义的,并由定义的,并由C自动翻开自动翻开和关闭。和关闭。l这三个标准文件分别是:这三个标准文件分别是:l标准输入文件,指针为标准输

9、入文件,指针为stdin:键盘。:键盘。l标准输出文件,指针为标准输出文件,指针为stdout:显示器。:显示器。l标准错误输出文件,指针为标准错误输出文件,指针为stderr:输出错误信息:输出错误信息 11.1 文件 l操作文件的步骤:操作文件的步骤:l翻开文件翻开文件l使用包括读或写使用包括读或写l关闭文件关闭文件 11.2 缓冲型文件的打开、关闭和读写 l翻开文件翻开文件l实际上就是让文件指针指向一个内存区域,文件实际上就是让文件指针指向一个内存区域,文件的各种信息被调入并的各种信息被调入并l存放在这个内存区域中。存放在这个内存区域中。lfopen()函数,文件翻开函数,用来以一个特定

10、的翻函数,文件翻开函数,用来以一个特定的翻开方式来翻开一个文件,一般形式为:开方式来翻开一个文件,一般形式为:lFILE*fp;lfp=fopen(文件名,文件翻开方式文件名,文件翻开方式);lfp为文件指针,这个指针指向为文件指针,这个指针指向FILE结构体变量的首结构体变量的首地址。地址。l文件名为被翻开文件的名字;在名字之前,可以加文件名为被翻开文件的名字;在名字之前,可以加上路径;文件名,可以是字符数组或者字符串常量。上路径;文件名,可以是字符数组或者字符串常量。l文件翻开方式,那么是要如何操作文件。文件翻开方式,那么是要如何操作文件。 11.2 缓冲型文件的打开、关闭和读写 l翻开方

11、式:翻开方式:l由由r(read),w(write),a(append),t(text),b(binary),+,组合而成,组合而成l对文本文件对文本文件text的根本操作:的根本操作:rt只读文本文件、只读文本文件、wt只写文本文件、只写文本文件、at追加文本文件追加文本文件l对二进制文件对二进制文件binary的根本操作:的根本操作:rb只读二进制文件、只读二进制文件、wb只写二进制文只写二进制文件、件、ab追加二进制文件追加二进制文件l书写的时候对表达文本文件的书写的时候对表达文本文件的t可以省略可以省略lr表达的是只读方式,以只读方式将文件翻开,将文件信息调入内存;假设文件翻开表达的是

12、只读方式,以只读方式将文件翻开,将文件信息调入内存;假设文件翻开不成功,那么返回不成功,那么返回NULL。lw表达的是只写方式,以只写方式将文本文件翻开。假设文件不存在,那么在磁盘表达的是只写方式,以只写方式将文本文件翻开。假设文件不存在,那么在磁盘上相应的位置新建一个文件;假设文件已存在,那么去除掉原来该文件中所有信息,上相应的位置新建一个文件;假设文件已存在,那么去除掉原来该文件中所有信息,重新往该文件中写入缓冲区信息重新往该文件中写入缓冲区信息la表达的是追加方式,以只写方式将文本文件翻开。假设文件不存在,那么返回空值表达的是追加方式,以只写方式将文本文件翻开。假设文件不存在,那么返回空

13、值NULL;假设文件已存在,在原来的文件数据后,写入缓冲区信息。;假设文件已存在,在原来的文件数据后,写入缓冲区信息。l+的意思是读和写都允许。的意思是读和写都允许。+经常与这经常与这6种方式一起,如:种方式一起,如:rt+,rb+,w+,等,等 11.2 缓冲型文件的打开、关闭和读写 l关闭文件关闭文件l关闭文件是指的断开指针与文件之间的联系,释放文件缓关闭文件是指的断开指针与文件之间的联系,释放文件缓冲区冲区lfclose()函数,文件关闭函数,当文件调用结束后,要使函数,文件关闭函数,当文件调用结束后,要使用用fclose()函数把文件关闭。函数把文件关闭。l一般形式为:一般形式为:fc

14、lose(fp);lfp为文件指针,这个指针指向为文件指针,这个指针指向FILE结构体变量的首地址。结构体变量的首地址。l正常关闭的时候将返回正常关闭的时候将返回0值,而发生错误的时候返回非值,而发生错误的时候返回非0。 11.2 缓冲型文件的打开、关闭和读写 lfgetc()函数:函数:lfgetc()从文件中读取一个字符从文件中读取一个字符l假设操作成功假设操作成功,那么返回读入的字符那么返回读入的字符,假设操作不成功假设操作不成功,或者文或者文件结束件结束,那么返回那么返回EOF。l一般使用方式:一般使用方式:lcharch;lFILE*fp;l文件以只读或者读写翻开之后,文件以只读或者

15、读写翻开之后,lch=fgetcfp;l将将fp指针指向的那个文件中的一个字符读出来,赋值给指针指向的那个文件中的一个字符读出来,赋值给ch, 11.2 缓冲型文件的打开、关闭和读写 l从一个的文件中读入所有的字符,打印显示到屏幕上从一个的文件中读入所有的字符,打印显示到屏幕上l#includelvoidmain()lFILE*fp;lcharc;lcharfile30;lprintf(inputdirectoryandfile:);lgets(file);lif(fp=fopen(file,r)=NULL)lprintf(openerroronreadingn,file);lexit(0);

16、llwhile(c=fgetc(fp)!=EOF)lputchar(c);lfclose(fp);l 11.2 缓冲型文件的打开、关闭和读写 lfputc()函数:往文本文件中写入一个字符函数:往文本文件中写入一个字符l假设操作成功假设操作成功,那么返回写入的字符那么返回写入的字符,假设操作不成功,那么返假设操作不成功,那么返回回EOF。l一般使用方式:一般使用方式:lfputc字符,文件指针;字符,文件指针;l将字符写入到文件指针所指的那个文件中去将字符写入到文件指针所指的那个文件中去l文件必须以只写或者读写或者追加方式翻开文件必须以只写或者读写或者追加方式翻开l使用使用w方式,文件内部指针

17、会从文件头开始,重新写入,方式,文件内部指针会从文件头开始,重新写入,l使用使用a方式,那么是从已存在的文件尾部,继续写入。方式,那么是从已存在的文件尾部,继续写入。 11.2 缓冲型文件的打开、关闭和读写 l键盘输入字符串,将字符串记录到指定文本文件中,最后在键盘输入字符串,将字符串记录到指定文本文件中,最后在屏幕上打印出这个文本文件中的内容字符串以回车结束屏幕上打印出这个文本文件中的内容字符串以回车结束 11.2 缓冲型文件的打开、关闭和读写#includevoidmain()FILE*fp;charc;charfile30;printf(inputdirectoryandfile:);g

18、ets(file);if(fp=fopen(file,w)=NULL)printf(openerroronwritinginn);exit(0);while(c=getchar()!=n)fputc(c,fp);fclose(fp);if(fp=fopen(file,r)=NULL)printf(openerroronreadingn);exit(0);while(c=fgetc(fp)!=EOF)putchar(c);fclose(fp); lfread()函数与函数与fwrite()函数:函数:lfread与与fwrite是用来整块的读写数据的。是用来整块的读写数据的。 11.2 缓冲型文

19、件的打开、关闭和读写 lfread()函数函数lfread的一般形式为:的一般形式为:lfread(buffer,size,n,fp);l假设操作成功,从假设操作成功,从fp所指向的文件中,读取所指向的文件中,读取n个数据个数据项,存放到项,存放到buffer指针所指向的内存区域,并且返回指针所指向的内存区域,并且返回读出的数据项个数读出的数据项个数l假设文件结束或操作失败,那么返回假设文件结束或操作失败,那么返回0 11.2 缓冲型文件的打开、关闭和读写 lfwrite()函数函数lfwrite的一般形式为:的一般形式为:lfwrite(buffer,size,n,fp);l假设操作成功,那

20、么将假设操作成功,那么将buffer指针所指向的内存区域指针所指向的内存区域中的中的n个数据项,写入个数据项,写入fp所指向的文件中,所指向的文件中,l假设操作失败,那么返回假设操作失败,那么返回0 11.2 缓冲型文件的打开、关闭和读写 l在在EMPLOYEE职工信息系统中,输入数据,保存到文件中去,职工信息系统中,输入数据,保存到文件中去,并且从文件中读出数据并且从文件中读出数据 11.2 缓冲型文件的打开、关闭和读写#includevoidmain()structemployeeintEId;charname20;chartel10;floatsalary;*pemp,*p;FILE*f

21、p1,fp2;floattemp;if(fp1=fopen(c:tcexample.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(s

22、tructemployee),1,fp1);fclose(fp1);if(fp2=fopen(c:tcexample.txt,r+)=NULL)printf(openerroronreading);exit(0); fread(p,sizeof(structemployee),1,fp2);printf(newemployeesdetail:n);printf(Eidtnamettelttsalaryn);printf(%dt%st%st%.2fn,p-EId,p-name,p-tel,p-salary);fclose(fp2);lfprintf函数与函数与fscanf函数函数lfprintf

23、函数与函数与fscanf函数实际上与函数实际上与printf,scanf很很相似相似l不同的是不同的是scanf与与printf是从键盘和屏幕进行读写,是从键盘和屏幕进行读写,而而fscanf,fprintf那么是对普通文件进行操作。那么是对普通文件进行操作。lscanf和和fprintf的格式字符控制符,与的格式字符控制符,与scanf,printf的格式控制符相同。的格式控制符相同。 11.3 文件的I/Olfprintf函数函数lfprintf的一般使用形式:的一般使用形式:lfprintf文件指针,格式控制符,输入表文件指针,格式控制符,输入表;l假设操作成功,那么将输出项按照制定格式

24、写入文假设操作成功,那么将输出项按照制定格式写入文件指针所指向的文件中,并且返回写入的字节数。件指针所指向的文件中,并且返回写入的字节数。l假设操作不成功,那么返回假设操作不成功,那么返回EOF 11.3 文件的I/Olfscanf函数函数lfscanf的一般使用形势:的一般使用形势:lfscanf文件指针,格式控制符,输入表文件指针,格式控制符,输入表;l假设操作成功,那么从文件指针所指向的文件中读假设操作成功,那么从文件指针所指向的文件中读取数据,送到指定的内存地址中,并且返回实际读取数据,送到指定的内存地址中,并且返回实际读出的数据项个数,假设没有读取数据项那么返回出的数据项个数,假设没

25、有读取数据项那么返回0。l假设操作不成功,或者文件结束,那么返回假设操作不成功,或者文件结束,那么返回EOF。 11.3 文件的I/O l在在EMPLOYEE职工信息系统中,输入数据,保存到文件中职工信息系统中,输入数据,保存到文件中去,并且从文件中读出数据使用去,并且从文件中读出数据使用fscanf和和fprintf。 11.3 文件的I/O#includevoidmain()structemployeeintEId;charname20;chartel10;floatsalary;*pemp,*p;FILE*fp1,fp2;floattemp;if(fp1=fopen(c:tcexampl

26、e.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.3 文件的I/Ofprintf(fp1,%dt%st%st%.2fn,pemp-EId,pemp-name,pemp-tel,pemp-salary);

27、fclose(fp1);if(fp2=fopen(c:tcexample.txt,r+)=NULL)printf(openerroronreading);exit(0);fscanf(fp2,%d%s%s%f,p-EId,p-name,p-tel,&temp);p-salary=temp;printf(newemployeesdetail:n);printf(Eidtnamettelttsalaryn);printf(%dt%st%st%.2fn,p-EId,p-name,p-tel,p-salary);fclose(fp2); lfgets()与与fputs()函数函数lfgets与与fpu

28、ts处理字符串往文件中的读写问题。处理字符串往文件中的读写问题。lfgets函数是用来从制定的文件中读取字符串函数是用来从制定的文件中读取字符串到内存中的到内存中的lfputs函数时用来向文件写入字符串的函数时用来向文件写入字符串的 11.3 文件的I/O lfgets函数函数l其调用的一般形式为:其调用的一般形式为:lfgets字符串首地址,字符串首地址,n,文件指针,文件指针;l假设操作成功,就可以从文件中读取文件里的字符假设操作成功,就可以从文件中读取文件里的字符串至多串至多n-1个字符,加上一个个字符,加上一个0放入到内存中的字符放入到内存中的字符数组,返回字符数组的首地址。数组,返回

29、字符数组的首地址。l假设操作失败,那么返回假设操作失败,那么返回0值。值。 11.3 文件的I/O 从文件中读取从文件中读取8个字符的字符串,并打印出来。个字符的字符串,并打印出来。11.3 文件的I/O#includevoidmain()FILE*fp;char*string=;if(fp=fopen(c:tcexample.txt,r+)=NULL)printf(openerroronreading);exit(0);fgets(string,9,fp);printf(%sn,string);fclose(fp); lfputs函数函数l其调用的一般形式为:其调用的一般形式为:lfputs

30、字符串,文件指针字符串,文件指针;l假设操作成功,函数中的字符串,将被写入文件指假设操作成功,函数中的字符串,将被写入文件指针所指的文件中去。且返回一个非针所指的文件中去。且返回一个非0值。值。l假设操作失败,那么返回假设操作失败,那么返回0值值 11.3 文件的I/O 在文件在文件c:tcexample.txt中以字符串中以字符串“ThisisanExample覆盖覆盖掉其他文件内容掉其他文件内容11.3 文件的I/O#includevoidmain()FILE*fp;char*string=ThisisanExamplen;if(fp=fopen(c:tcexample.txt,w+)=N

31、ULL)printf(openerroronreading);exit(0);fputs(string,fp);printf(%sn,string);fclose(fp);l文件读写指针移动函数文件读写指针移动函数fseek()与与rewind()lrewind函数把文件内部的指针重新移回到文件首部。调用的一般形式:函数把文件内部的指针重新移回到文件首部。调用的一般形式:lrewind文件指针文件指针;lfseek函数,是移动文件内部的指针。调用的一般形式:函数,是移动文件内部的指针。调用的一般形式:lfseek文件指针,位移量,位移起点文件指针,位移量,位移起点;l位移量是指文件内部指针被移动了多少个字节位移量是指文件内部指针被移动了多少个字节l位移起点,有位移起点,有3个取值,个取值,0,1,2;从起点开始,那么位移起点取;从起点开始,那么位移起点取0;如果;如果从文件尾部开始,那么位移起点取从文件尾部开始,那么位移起点取2;如果位移起点从文件内部指针现在;如果位移起点从文件内部指针现在所处的位置开始,那么位移起点取值为所处的位置开始,那么位移起点取值为1l如:如:fseek(fp,10,0);l表达的含义是将表达的含义是将fp文件,从文件首开始,指针位移文件,从文件首开始,指针位移10个位置,指向第个位置,指向第10个字符个字符 11.3 文件的I/O

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号