C语言程序设计文件程序设计.pptx
《C语言程序设计文件程序设计.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计文件程序设计.pptx(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、9.1 文件概述 9.1.1 9.1.1 文件的概念文件的概念 9.1.2 9.1.2 文件的分类文件的分类 9.1.3 9.1.3 文件的一般操作过程文件的一般操作过程 9.1.4 9.1.4 文件的指针文件的指针第1页/共40页9.1.1 文件的概念 文文件件是是计计算算机机中中的的一一个个重重要要概概念念,通通常常是是指指存存储储在在外外部部介介质质上上的的信信息息的的集集合合。存存储储程程序序代代码码的的文文件件称称为为程程序序文文件件,存存储储数数据据的的文文件件称称为为数数据据文文件件。另另外外,C C语语言言把把输输入入输输出出设设备备也也视视为为一一类类特特殊殊的的文文件件。计
2、计算算机机对对文文件件的的操操作作总总体体上上分分成成输输入入和和输输出出两两大大类类,对对文文件件的的输输人人输输出出(I/0I/0)过过程程是是通通过过操操作作系系统统进进行行管管理理的的。C C语语言言程程序序对对文文件件的的处处理理是是通通过过标标准准函函数数库库中中的的文文件件操操作作函函数数实实现现的的,使使用用这这些些函函数数,可以简单、高效、安全地访问外部数据。可以简单、高效、安全地访问外部数据。第2页/共40页9.1.1 文件的概念1 1设备文件设备文件在在C C语言中,所有的外部设备均被作为文件对待,这种文件称语言中,所有的外部设备均被作为文件对待,这种文件称为设备文件。对
3、外部设备的输人输出处理就是读写设备文件的为设备文件。对外部设备的输人输出处理就是读写设备文件的过程。过程。2文件缓冲区在程序的运行过程中,程序要将保存在内存中的数据写入磁盘,首先要建立一个“输出文件缓冲区”,这个缓冲区是一个连接计算机内存数据与外存文件的桥梁,当向文件输出数据时,准备输出的数据先写入文件缓冲区,等文件缓冲区填满后再输出到文件中。这一过程称为“写文件”,是数据输出过程。与“写文件”过程相对的是要将保存在文件中的数据装入内存。首先要建立一个“输入文件缓冲区”,当从文件中输入数据时,也是把读入的数据先写入文件缓冲区,等文件缓冲区数据装满之后再整个送给程序。这一过程称为“读文件”,是数
4、据输入过程。第3页/共40页9.1.1 文件的概念使用缓冲区的文件读、写示意图 第4页/共40页9.1.2 文件的分类以以ASCIIASCII码字符形式存储的文件称为文本文件,又叫码字符形式存储的文件称为文本文件,又叫ASCIIASCII文件。文件。例如用高级程序语言编写的程序文件是文本文件,用例如用高级程序语言编写的程序文件是文本文件,用Windows Windows“记事本记事本”程序创建的文件也是文本文件。文本文件是一种字符程序创建的文件也是文本文件。文本文件是一种字符流文件,文本文件的一个字符就是一个字节,因而方便了字符的流文件,文本文件的一个字符就是一个字节,因而方便了字符的处理,不
5、过文本文件一般要占用较大的存储空间。处理,不过文本文件一般要占用较大的存储空间。二进制文件是按照数据在内存中的字节序列形成的字节流文件。二进制文件是按照数据在内存中的字节序列形成的字节流文件。例如例如C C程序的目标文件(扩展名为程序的目标文件(扩展名为objobj)和可执行文件(扩展名为)和可执行文件(扩展名为exeexe)都是二进制文件。在二进制文件中,字节信息与实际的数据位)都是二进制文件。在二进制文件中,字节信息与实际的数据位并不一一对应,因此,若直接显示二进制文件内容时,用户看到的是并不一一对应,因此,若直接显示二进制文件内容时,用户看到的是一些不能识别的字符。一些不能识别的字符。n
6、 n 文本文件文本文件文本文件文本文件n n 二进制文件二进制文件二进制文件二进制文件第5页/共40页9.1.3 文件的一般操作过程 使用文件的一般步骤使用文件的一般步骤打开文件打开文件操作文件操作文件关闭文件关闭文件uu打开文件:建立用户程序与文件的联系,系统为文件开辟文件打开文件:建立用户程序与文件的联系,系统为文件开辟文件缓冲区。缓冲区。uu操作文件:是指对文件的读、写、追加和定位操作。操作文件:是指对文件的读、写、追加和定位操作。读操作:从文件中读出数据,即将文件中的数据输入到计读操作:从文件中读出数据,即将文件中的数据输入到计算机内存。算机内存。写操作:向文件中写入数据,即将计算机内
7、存中的数据输写操作:向文件中写入数据,即将计算机内存中的数据输出到文件。出到文件。追加操作:将新的数据写到文件原有数据的后面。追加操作:将新的数据写到文件原有数据的后面。定位操作:移动文件读写位置指针。定位操作:移动文件读写位置指针。uu关闭文件:切断文件与程序的联系,将文件缓冲区的内容写入关闭文件:切断文件与程序的联系,将文件缓冲区的内容写入磁盘,并释放文件缓冲区。磁盘,并释放文件缓冲区。第6页/共40页9.1.4 文件的指针 文件型指针变量的定义文件型指针变量的定义FILE*FILE*变量名变量名;例如:例如:FILE*p;FILE*p;注意:注意:由于文件类型由于文件类型FILEFILE
8、在头文件在头文件stdio.hstdio.h中定义,所以在使用中定义,所以在使用FILEFILE类型前必须先打开类型前必须先打开stdio.hstdio.h文件。文件。如果需要对某一个文件进行读写操作,必须首先要指定指如果需要对某一个文件进行读写操作,必须首先要指定指向它的文件指针。只有通过文件指针,才能调用相应的文向它的文件指针。只有通过文件指针,才能调用相应的文件。当程序需要同时处理多个文件时,则需要说明多个件。当程序需要同时处理多个文件时,则需要说明多个FILEFILE型的指针变量,使它们分别指向多个不同的文件。型的指针变量,使它们分别指向多个不同的文件。第7页/共40页9.2文件的基本
9、操作9.2.1 9.2.1 打开和关闭文件打开和关闭文件9.2.2 9.2.2 最基本的文件读写函数最基本的文件读写函数第8页/共40页9.2.1 打开和关闭文件打开文件操作是使用文件的第一个步骤,而关闭文件操作则是使用文打开文件操作是使用文件的第一个步骤,而关闭文件操作则是使用文件的最后一个步骤。件的最后一个步骤。C C语言系统分别使用语言系统分别使用fopen()fopen()函数和函数和fclose()fclose()函数函数实现文件的打开和关闭操作。实现文件的打开和关闭操作。1 1文件打开函数文件打开函数fopen()fopen()fopen()fopen()函数用来实现打开文件,它解
10、决如下函数用来实现打开文件,它解决如下3 3个问题:个问题:指定要打开的文件名;指定要打开的文件名;指定文件的使用方式,如是读文件还是写文件等;指定文件的使用方式,如是读文件还是写文件等;为打开的文件指定一个指针变量,以便使用这个指针变量对文件进为打开的文件指定一个指针变量,以便使用这个指针变量对文件进行访问。行访问。fopen()fopen()函数的调用方式函数的调用方式FILE*fp;FILE*fp;fp=fopen(fp=fopen(文件名文件名,使用文件的方式使用文件的方式););例如例如:fp=(example.txt,r);fp=(example.txt,r);表示要打开的文件名为
11、表示要打开的文件名为example.txtexample.txt,使用文件的方式是,使用文件的方式是“r”r”方式,方式,文件指针是文件指针是fpfp。第9页/共40页9.2.1 打开和关闭文件 文件使用方式文件使用方式文件使用方式作 用r以“只读”方式打开一个文本文件w以“只写”方式打开一个文本文件a向文本文件尾增加数据rb以“只读”方式打开一个二进制文件wb以“只写”方式打开一个二进制文件ab向二进制文件尾增加数据r+以“读/写”方式打开一个文本文件w+以“读/写”方式建立一个新的文本文件a+以“读/写/追加”方式打开一个文本文件rb+以“读/写”方式打开一个二进制文件wb+以“读/写”方
12、式建立一个新的二进制文件ab+以“读/写/追加”方式打开一个二进制文件第10页/共40页9.2.1 打开和关闭文件2 2关闭文件函数关闭文件函数fclose()fclose()fclose()fclose()函数的一般格式函数的一般格式fclose(fclose(文件指针文件指针););功能功能关闭关闭“文件指针文件指针”所指向的文件,释放打开文件时使用的结构体变量,断开文所指向的文件,释放打开文件时使用的结构体变量,断开文件指针与文件的联系。件指针与文件的联系。例如:例如:fclose(fp);fclose(fp);第11页/共40页9.2.2最基本的文件读写函数1 1fputc()fput
13、c()函数函数 一般形式一般形式fputc(ch,fp);fputc(ch,fp);功能功能将字符(将字符(chch的值)输出到的值)输出到fpfp所指向的文件中。所指向的文件中。第12页/共40页9.2.2最基本的文件读写函数例例9-19-1使用使用fputc()fputc()函数在屏幕显示一个字符串。函数在屏幕显示一个字符串。/*program e9-1.c*/*program e9-1.c*/#include#includevoid main()void main()char*p=This is a example.;char*p=This is a example.;while(*p!
14、=0)while(*p!=0)fputc(*p+,fputc(*p+,stdoutstdout););设备文件设备文件第13页/共40页9.2.2最基本的文件读写函数例例9-29-2 把从键盘输入的一个字符串写入到磁盘文件把从键盘输入的一个字符串写入到磁盘文件example.txtexample.txt中。中。/*program e9-2.c*/*program e9-2.c*/#include#includevoid main()void main()char ch;char ch;FILE*fp;FILE*fp;fp=fopen(example.txt,w);fp=fopen(exampl
15、e.txt,w);printf(Enter a string:);printf(Enter a string:);while(ch=getchar()!=n)while(ch=getchar()!=n)fputc(ch,fp);fputc(ch,fp);fclose(fp);fclose(fp);第14页/共40页9.2.2最基本的文件读写函数2 2fgetc()fgetc()函数函数从指定文件读入一个字符,该文件必须是以读或读写方式打开的。从指定文件读入一个字符,该文件必须是以读或读写方式打开的。通常使用如下的形式调用通常使用如下的形式调用fgetc()fgetc()函数函数ch=fgetc
16、(fp);ch=fgetc(fp);其中,其中,fpfp为文件型指针变量,为文件型指针变量,chch为字符变量。正常情况下为字符变量。正常情况下fgetcfgetc()()函数的返回值是从文件中读出的一个字符。函数的返回值是从文件中读出的一个字符。当打开文件并立即使用当打开文件并立即使用fgetc()fgetc()读文件时,读文件时,fgetc()fgetc()函数从文件开函数从文件开始位置读取一个字符。每读取一个字符后,文件的位置指针后移始位置读取一个字符。每读取一个字符后,文件的位置指针后移一个字符位置。若当前读取的是文本文件,当遇到文件结束标志一个字符位置。若当前读取的是文本文件,当遇到
17、文件结束标志时,时,fgetc()fgetc()函数的返回值为函数的返回值为EOFEOF。第15页/共40页9.2.2最基本的文件读写函数例例9-39-3 使用使用fgetc()fgetc()函数输出文件函数输出文件example.txtexample.txt的内容。的内容。/*program e9-3.c*/*program e9-3.c*/#include#includevoid main()void main()char ch;char ch;FILE*fp;FILE*fp;fp=fopen(example.txt,r);fp=fopen(example.txt,r);while(ch=
18、while(ch=fgetc(fp)fgetc(fp)!=EOF)!=EOF)putchar(ch);putchar(ch);fclose(fp);fclose(fp);第16页/共40页9.2.2最基本的文件读写函数例例9-49-4 使用使用feof()feof()进行文件读取控制,输出文件进行文件读取控制,输出文件example.txtexample.txt的内容。的内容。/*program e9-4.c*/*program e9-4.c*/#include#includevoid main()void main()FILE*fp;FILE*fp;if(fp=fopen(example.t
19、xt,r)=NULL)if(fp=fopen(example.txt,r)=NULL)printf(file can not open!n);printf(file can not open!n);exit(1);exit(1);while(!feof(fp)while(!feof(fp)putchar(fgetc(fp);putchar(fgetc(fp);fclose(fp);fclose(fp);判断被读判断被读取的文件取的文件是否已经是否已经读完。当读完。当未遇文件未遇文件结束标志结束标志时,时,feof()feof()的值是的值是0 0,否则否则feof()feof()的值是的值是1
20、 1。第17页/共40页9.3文件的数据块读写操作 9.3.1 fwrite()9.3.1 fwrite()函数函数 9.3.2 fread()9.3.2 fread()函数函数第18页/共40页9.3.1 fwrite()函数fwrite()fwrite()函数的功能是把内存中的一些数据块写到指定的文件中。函数的功能是把内存中的一些数据块写到指定的文件中。一般调用形式一般调用形式fwrite(buffer,size,count,fp);fwrite(buffer,size,count,fp);其中:其中:fpfp是接受数据的文件指针;是接受数据的文件指针;bufferbuffer是数据块的内
21、存首地址,通常是指针变量名、数组名是数据块的内存首地址,通常是指针变量名、数组名等;等;sizesize是一个数据块的字节数(即数据块的大小);是一个数据块的字节数(即数据块的大小);countcount是执行一次是执行一次fwrite()fwrite()函数从内存输出到函数从内存输出到fpfp文件的数据文件的数据块数目。块数目。第19页/共40页9.3.1 fwrite()函数例例9-59-5 从键盘上输入一批学从键盘上输入一批学生数据,然后以生数据,然后以“stu_liststu_list”文件名存储到文件名存储到磁盘上。磁盘上。/*program e9-5.c*/#include#def
22、ine N 4struct student_type char name10;int num;int score;stud;void main()void main()int i;int i;FILE*fp;FILE*fp;if(fp=fopen(stu_list,wb)=NULL)if(fp=fopen(stu_list,wb)=NULL)printf(Can not open filen);printf(Can not open filen);exit(1);exit(1);printf(Input data,please!n);printf(Input data,please!n);fo
23、r(i=0;iN;i+)for(i=0;iN;i+)scanf(%s%d%d,stud.name,&stud.num,&scanf(%s%d%d,stud.name,&stud.num,&stud.score);stud.score);fwrite(&stud,sizeof(structfwrite(&stud,sizeof(struct student_type),1,fp);student_type),1,fp);fclose(fp);fclose(fp);printf(All right.n);printf(All right.n);第20页/共40页9.3.2 fread()函数fre
24、ad()fread()函数把指定文件中的一个数据块读到内存中。函数把指定文件中的一个数据块读到内存中。一般调用形式一般调用形式fread(buffer,size,count,fp);fread(buffer,size,count,fp);其中:其中:fpfp是读取数据的文件指针;是读取数据的文件指针;bufferbuffer是接受文件数据的内存首地址,通常是指针变量是接受文件数据的内存首地址,通常是指针变量名、数组名等;名、数组名等;sizesize是一个数据块的字节数(即数据块的大小);是一个数据块的字节数(即数据块的大小);countcount是执行一次是执行一次fread()fread(
25、)函数读取的数据块的数目。函数读取的数据块的数目。例例9-69-6 将上述将上述stu_liststu_list文件的内容显示在屏幕上。文件的内容显示在屏幕上。/*program e9-6-1.c*/#include#define N 4struct student_typechar name10;int num;int score;stud;void main()int i;FILE*fp;if(fp=fopen(stu_list,rb)=NULL)printf(Can not open file.n);exit(1);for(i=0;iN;i+)fread(&stud,sizeof(str
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 文件 程序设计
限制150内