欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言程序设计文件程序设计.pptx

    • 资源ID:87125764       资源大小:305.37KB        全文页数:40页
    • 资源格式: PPTX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序设计文件程序设计.pptx

    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语语言言把把输输入入输输出出设设备备也也视视为为一一类类特特殊殊的的文文件件。计计算算机机对对文文件件的的操操作作总总体体上上分分成成输输入入和和输输出出两两大大类类,对对文文件件的的输输人人输输出出(I/0I/0)过过程程是是通通过过操操作作系系统统进进行行管管理理的的。C C语语言言程程序序对对文文件件的的处处理理是是通通过过标标准准函函数数库库中中的的文文件件操操作作函函数数实实现现的的,使使用用这这些些函函数数,可以简单、高效、安全地访问外部数据。可以简单、高效、安全地访问外部数据。第2页/共40页9.1.1 文件的概念1 1设备文件设备文件在在C C语言中,所有的外部设备均被作为文件对待,这种文件称语言中,所有的外部设备均被作为文件对待,这种文件称为设备文件。对外部设备的输人输出处理就是读写设备文件的为设备文件。对外部设备的输人输出处理就是读写设备文件的过程。过程。2文件缓冲区在程序的运行过程中,程序要将保存在内存中的数据写入磁盘,首先要建立一个“输出文件缓冲区”,这个缓冲区是一个连接计算机内存数据与外存文件的桥梁,当向文件输出数据时,准备输出的数据先写入文件缓冲区,等文件缓冲区填满后再输出到文件中。这一过程称为“写文件”,是数据输出过程。与“写文件”过程相对的是要将保存在文件中的数据装入内存。首先要建立一个“输入文件缓冲区”,当从文件中输入数据时,也是把读入的数据先写入文件缓冲区,等文件缓冲区数据装满之后再整个送给程序。这一过程称为“读文件”,是数据输入过程。第3页/共40页9.1.1 文件的概念使用缓冲区的文件读、写示意图 第4页/共40页9.1.2 文件的分类以以ASCIIASCII码字符形式存储的文件称为文本文件,又叫码字符形式存储的文件称为文本文件,又叫ASCIIASCII文件。文件。例如用高级程序语言编写的程序文件是文本文件,用例如用高级程序语言编写的程序文件是文本文件,用Windows Windows“记事本记事本”程序创建的文件也是文本文件。文本文件是一种字符程序创建的文件也是文本文件。文本文件是一种字符流文件,文本文件的一个字符就是一个字节,因而方便了字符的流文件,文本文件的一个字符就是一个字节,因而方便了字符的处理,不过文本文件一般要占用较大的存储空间。处理,不过文本文件一般要占用较大的存储空间。二进制文件是按照数据在内存中的字节序列形成的字节流文件。二进制文件是按照数据在内存中的字节序列形成的字节流文件。例如例如C C程序的目标文件(扩展名为程序的目标文件(扩展名为objobj)和可执行文件(扩展名为)和可执行文件(扩展名为exeexe)都是二进制文件。在二进制文件中,字节信息与实际的数据位)都是二进制文件。在二进制文件中,字节信息与实际的数据位并不一一对应,因此,若直接显示二进制文件内容时,用户看到的是并不一一对应,因此,若直接显示二进制文件内容时,用户看到的是一些不能识别的字符。一些不能识别的字符。n n 文本文件文本文件文本文件文本文件n n 二进制文件二进制文件二进制文件二进制文件第5页/共40页9.1.3 文件的一般操作过程 使用文件的一般步骤使用文件的一般步骤打开文件打开文件操作文件操作文件关闭文件关闭文件uu打开文件:建立用户程序与文件的联系,系统为文件开辟文件打开文件:建立用户程序与文件的联系,系统为文件开辟文件缓冲区。缓冲区。uu操作文件:是指对文件的读、写、追加和定位操作。操作文件:是指对文件的读、写、追加和定位操作。读操作:从文件中读出数据,即将文件中的数据输入到计读操作:从文件中读出数据,即将文件中的数据输入到计算机内存。算机内存。写操作:向文件中写入数据,即将计算机内存中的数据输写操作:向文件中写入数据,即将计算机内存中的数据输出到文件。出到文件。追加操作:将新的数据写到文件原有数据的后面。追加操作:将新的数据写到文件原有数据的后面。定位操作:移动文件读写位置指针。定位操作:移动文件读写位置指针。uu关闭文件:切断文件与程序的联系,将文件缓冲区的内容写入关闭文件:切断文件与程序的联系,将文件缓冲区的内容写入磁盘,并释放文件缓冲区。磁盘,并释放文件缓冲区。第6页/共40页9.1.4 文件的指针 文件型指针变量的定义文件型指针变量的定义FILE*FILE*变量名变量名;例如:例如:FILE*p;FILE*p;注意:注意:由于文件类型由于文件类型FILEFILE在头文件在头文件stdio.hstdio.h中定义,所以在使用中定义,所以在使用FILEFILE类型前必须先打开类型前必须先打开stdio.hstdio.h文件。文件。如果需要对某一个文件进行读写操作,必须首先要指定指如果需要对某一个文件进行读写操作,必须首先要指定指向它的文件指针。只有通过文件指针,才能调用相应的文向它的文件指针。只有通过文件指针,才能调用相应的文件。当程序需要同时处理多个文件时,则需要说明多个件。当程序需要同时处理多个文件时,则需要说明多个FILEFILE型的指针变量,使它们分别指向多个不同的文件。型的指针变量,使它们分别指向多个不同的文件。第7页/共40页9.2文件的基本操作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()函数用来实现打开文件,它解决如下函数用来实现打开文件,它解决如下3 3个问题:个问题:指定要打开的文件名;指定要打开的文件名;指定文件的使用方式,如是读文件还是写文件等;指定文件的使用方式,如是读文件还是写文件等;为打开的文件指定一个指针变量,以便使用这个指针变量对文件进为打开的文件指定一个指针变量,以便使用这个指针变量对文件进行访问。行访问。fopen()fopen()函数的调用方式函数的调用方式FILE*fp;FILE*fp;fp=fopen(fp=fopen(文件名文件名,使用文件的方式使用文件的方式););例如例如:fp=(example.txt,r);fp=(example.txt,r);表示要打开的文件名为表示要打开的文件名为example.txtexample.txt,使用文件的方式是,使用文件的方式是“r”r”方式,方式,文件指针是文件指针是fpfp。第9页/共40页9.2.1 打开和关闭文件 文件使用方式文件使用方式文件使用方式作 用r以“只读”方式打开一个文本文件w以“只写”方式打开一个文本文件a向文本文件尾增加数据rb以“只读”方式打开一个二进制文件wb以“只写”方式打开一个二进制文件ab向二进制文件尾增加数据r+以“读/写”方式打开一个文本文件w+以“读/写”方式建立一个新的文本文件a+以“读/写/追加”方式打开一个文本文件rb+以“读/写”方式打开一个二进制文件wb+以“读/写”方式建立一个新的二进制文件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()fputc()函数函数 一般形式一般形式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!=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(example.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(fp);ch=fgetc(fp);其中,其中,fpfp为文件型指针变量,为文件型指针变量,chch为字符变量。正常情况下为字符变量。正常情况下fgetcfgetc()()函数的返回值是从文件中读出的一个字符。函数的返回值是从文件中读出的一个字符。当打开文件并立即使用当打开文件并立即使用fgetc()fgetc()读文件时,读文件时,fgetc()fgetc()函数从文件开函数从文件开始位置读取一个字符。每读取一个字符后,文件的位置指针后移始位置读取一个字符。每读取一个字符后,文件的位置指针后移一个字符位置。若当前读取的是文本文件,当遇到文件结束标志一个字符位置。若当前读取的是文本文件,当遇到文件结束标志时,时,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=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.txt,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 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是数据块的内存首地址,通常是指针变量名、数组名是数据块的内存首地址,通常是指针变量名、数组名等;等;sizesize是一个数据块的字节数(即数据块的大小);是一个数据块的字节数(即数据块的大小);countcount是执行一次是执行一次fwrite()fwrite()函数从内存输出到函数从内存输出到fpfp文件的数据文件的数据块数目。块数目。第19页/共40页9.3.1 fwrite()函数例例9-59-5 从键盘上输入一批学从键盘上输入一批学生数据,然后以生数据,然后以“stu_liststu_list”文件名存储到文件名存储到磁盘上。磁盘上。/*program e9-5.c*/#include#define 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);for(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()函数fread()fread()函数把指定文件中的一个数据块读到内存中。函数把指定文件中的一个数据块读到内存中。一般调用形式一般调用形式fread(buffer,size,count,fp);fread(buffer,size,count,fp);其中:其中:fpfp是读取数据的文件指针;是读取数据的文件指针;bufferbuffer是接受文件数据的内存首地址,通常是指针变量是接受文件数据的内存首地址,通常是指针变量名、数组名等;名、数组名等;sizesize是一个数据块的字节数(即数据块的大小);是一个数据块的字节数(即数据块的大小);countcount是执行一次是执行一次fread()fread()函数读取的数据块的数目。函数读取的数据块的数目。例例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(struct student_type),1,fp);printf(%-10s%4d%4dn,stud.name,stud.num,stud.score);fclose(fp);第21页/共40页9.3.2 fread()函数 再如,设有如下定义:再如,设有如下定义:struct student_typestruct student_type char name10;char name10;int num;int num;int age;int age;stud40;stud40;其中,结构体数组其中,结构体数组studstud的每一个元素用来存放一个学生的有关数的每一个元素用来存放一个学生的有关数据,假设学生的数据已存放在磁盘文件中,且该文件已打开,并据,假设学生的数据已存放在磁盘文件中,且该文件已打开,并由由fpfp指向,则可以用下面的语句把文件中前指向,则可以用下面的语句把文件中前4040个学生的数据输入个学生的数据输入到结构体数组到结构体数组studstud中:中:for(i=0;i40;i+)for(i=0;i40;i+)fread(&studi,sizeof(struct student_type),1,fp);fread(&studi,sizeof(struct student_type),1,fp);第22页/共40页9.4 文件的其他操作 9.4.1 9.4.1 文件的格式化读写文件的格式化读写 9.4.2 9.4.2 文件的随机读写操作文件的随机读写操作 9.4.3 ftell()9.4.3 ftell()函数函数 9.4.4 9.4.4 文件的字符串操作文件的字符串操作第23页/共40页9.4.1 文件的格式化读写1 1文件的格式化读操作文件的格式化读操作由由fscanf()fscanf()函数实现,从指定的文件中,按照说明的格式向变量函数实现,从指定的文件中,按照说明的格式向变量提供数据。提供数据。一般使用格式一般使用格式fscanf(fp,fscanf(fp,格式字符串格式字符串,输入表列输入表列););其中其中 fpfp是文件指针是文件指针“格式字符串格式字符串”和和“输入表列输入表列”与与scanf()scanf()函数的相关内函数的相关内容相同。容相同。例如:例如:fscanf(fp,“%d”,&m);fscanf(fp,“%d”,&m);该语句将磁盘文件中的数据送给变量该语句将磁盘文件中的数据送给变量mm,其中的磁盘文件由,其中的磁盘文件由fpfp指指向。向。第24页/共40页9.4.1 文件的格式化读写2 2文件的格式化写操作文件的格式化写操作由由fprintf()fprintf()函数实现,将指定变量的值按照一定的格式写到指定的文函数实现,将指定变量的值按照一定的格式写到指定的文件中。件中。一般使用格式一般使用格式fprintf(fp,fprintf(fp,格式字符串格式字符串,输出表列输出表列););说明:说明:fpfp是要写入数据的文件指针。是要写入数据的文件指针。“格式字符串格式字符串”和和“输出表列输出表列”与与printf()printf()函数的相关内容函数的相关内容形同。形同。例如:例如:fprintf(fp,%d,m);fprintf(fp,%d,m);该语句将整型变量该语句将整型变量mm按按%d%d格式输出到格式输出到fpfp指向的文件中。指向的文件中。例例9-79-7从键盘输入一个字符串和一个十进制整数,将它们写入从键盘输入一个字符串和一个十进制整数,将它们写入testtest文件中,文件中,然后再从然后再从testtest文件中读出并显示在屏幕上。文件中读出并显示在屏幕上。/*program e9-7.c*/#includevoid main()char s100;int a;FILE*fp;if(fp=fopen(test,w)=NULL)printf(file open error.n);exit(0);fscanf(stdin,%s%d,s,&a);fprintf(fp,%s%d,s,a);fclose(fp);if(fp=fopen(test,r)=NULL)printf(Cannot open file.n);exit(0);fscanf(fp,%s%d,s,&a);fprintf(stdout,%s%dn,s,a);fclose(fp);第25页/共40页9.4.2文件的随机读写操作1 1fseek()fseek()函数函数 功能:改变文件位置指针。功能:改变文件位置指针。调用形式调用形式fseek(fp,offset,position);fseek(fp,offset,position);其中:其中:fpfp为文件型指针;为文件型指针;文件位置指针的定位由参数文件位置指针的定位由参数offsetoffset和和positionposition共同确定。共同确定。positionposition规定指针定位时的基准位置,规定指针定位时的基准位置,offsetoffset规定文件位置指针离开基准位置的规定文件位置指针离开基准位置的偏移量,它的单位是字节。偏移量,它的单位是字节。positionposition的值用整常数表示的值用整常数表示,取值范围是取值范围是0 0、1 1、2 2三个数之一,其意义如下:三个数之一,其意义如下:0 0:表示基准位置为文件的开头位置;:表示基准位置为文件的开头位置;1 1:表示基准位置为文件的当前位置;:表示基准位置为文件的当前位置;2 2:表示基准位置为文件的结尾位置,该位置在文件内容的最后一个字:表示基准位置为文件的结尾位置,该位置在文件内容的最后一个字节之后。节之后。第26页/共40页9.4.2 文件的随机读写操作fseek()fseek()函数调用的实例:函数调用的实例:fseek(fp,50L,0);fseek(fp,50L,0);将位置指针移到文件头起始第将位置指针移到文件头起始第5050个字节处个字节处 fseek(fp,100L,1);fseek(fp,100L,1);将位置指针从当前位置向文件尾方向移动将位置指针从当前位置向文件尾方向移动100100个字节个字节 fseek(fp,-20L,2);fseek(fp,-20L,2);将位置指针从文件末尾向文件头方向移动将位置指针从文件末尾向文件头方向移动2020个字节个字节第27页/共40页9.4.2 文件的随机读写操作例例 9-89-8 在在 例例 9-69-6中中建建立立了了学学生生数数据据文文件件 stu_liststu_list,将将 其其中中 第第 3 3个个 学学 生生 的的 成成绩修改为绩修改为9797。/*program e9-8.c*/#includestruct student_type char name10;int num;int score;stud;void main()int i,size;FILE*fp;size=sizeof(struct student_type);if(fp=fopen(stu_list,rb+)=NULL)printf(file open error.n);exit(1);fseek(fp,2*size,0);fread(&stud,size,1,fp);printf(%s%d%dn,stud.name,stud.num,stud.score);printf(new score:);scanf(%d,&stud.score);fseek(fp,-size,1);fwrite(&stud,size,1,fp);fclose(fp);第28页/共40页9.4.2 文件的随机读写操作2.rewind()2.rewind()函数函数 作用:将文件位置指针复位。作用:将文件位置指针复位。调用形式调用形式rewind(fp);rewind(fp);其中:其中:fpfp为文件型指针。为文件型指针。执行执行rewind()rewind()函数后,对于函数后,对于fpfp指向的文件,不管当前的文件位置指针在何处,都指向的文件,不管当前的文件位置指针在何处,都使它复位到文件的开始位置。使它复位到文件的开始位置。第29页/共40页9.4.2 文件的随机读写操作例例9-99-9 在屏幕上显示文件在屏幕上显示文件e9-6-2.ce9-6-2.c的内容,并将该文件复制为文件的内容,并将该文件复制为文件e9-6-3.ce9-6-3.c。#include#includevoid main()void main()FILE*fp1,*fp2;FILE*fp1,*fp2;fp1=fopen(e9-6-2.c,r);fp1=fopen(e9-6-2.c,r);fp2=fopen(e9-6-3.c,w);fp2=fopen(e9-6-3.c,w);while(!feof(fp1)while(!feof(fp1)putchar(fgetc(fp1);putchar(fgetc(fp1);rewind(fp1);rewind(fp1);while(!feof(fp1)while(!feof(fp1)fputc(fgetc(fp1),fp2);fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp1);fclose(fp2);fclose(fp2);第30页/共40页9.4.3 ftell()函数ftell()ftell()函数用于获取文件位置指针,其调用形式如下:函数用于获取文件位置指针,其调用形式如下:ftell(fp);ftell(fp);其中:其中:fpfp为文件指针。为文件指针。ftell()ftell()函数的返回值是函数的返回值是fpfp所指向文件的当前读写位置,该值是一个长整型数,是所指向文件的当前读写位置,该值是一个长整型数,是位置指针从文件开始处到当前位置的位移量的字节数。位置指针从文件开始处到当前位置的位移量的字节数。第31页/共40页9.4.3 ftell()函数例例9-109-10 新建新建data.txtdata.txt文件,检查文件位置指针值;然后将字符串文件,检查文件位置指针值;然后将字符串Beijing 2008Beijing 2008写入文件中,再检查文件位置指针的值。写入文件中,再检查文件位置指针的值。#include stdio.h#include stdio.hmain()main()FILE*fp;long position;FILE*fp;long position;fp=fopen(data.txt,w);fp=fopen(data.txt,w);position=ftell(fp);position=ftell(fp);printf(position=%ldn,position);printf(position=%ldn,position);fprintf(fp,Beijing 2008);fprintf(fp,Beijing 2008);position=ftell(fp);position=ftell(fp);printf(position=%ldn,position);printf(position=%ldn,position);fclose(fp);fclose(fp);第32页/共40页9.4.4 文件的字符串操作1 1fgets()fgets()函数函数 一般调用形式一般调用形式fgets(buffer,n,fp);fgets(buffer,n,fp);作用作用从从fpfp指向的文件中读取指向的文件中读取n-1n-1个字符,然后存储到以个字符,然后存储到以bufferbuffer为首地为首地址的的内存空间中,通常址的的内存空间中,通常bufferbuffer是一个指针变量名、数组名等。是一个指针变量名、数组名等。如果在读入如果在读入 n-1n-1个字符的过程中遇到换行符或个字符的过程中遇到换行符或EOFEOF,读入即结束。,读入即结束。字符串读入后在最后加一个字符串读入后在最后加一个00字符作为字符串结束标志。字符作为字符串结束标志。第33页/共40页9.4.4 文件的字符串操作2 2fputs()fputs()函数函数 调用形式调用形式fputs(buffer,fp);fputs(buffer,fp);作用作用将内存将内存bufferbuffer中的字符串写到中的字符串写到fpfp指向的文件中,指向的文件中,bufferbuffer可以是一可以是一个字符串常量,也可以是字符串的首地址。个字符串常量,也可以是字符串的首地址。第34页/共40页9.4.4 文件的字符串操作例例9-119-11 将字符串将字符串Visual C+Visual C+和和Visual basicVisual basic依次存入文件依次存入文件texttext中,中,然后将第一个字符串读出并显示出来。然后将第一个字符串读出并显示出来。#include#includevoid main()void main()FILE*fp;FILE*fp;char string20;char string20;fp=fopen(text,w+);fp=fopen(text,w+);fputs(Visual C+n,fp);fputs(Visual C+n,fp);fputs(Visual basicn,fp);fputs(Visual basicn,fp);rewind(fp);rewind(fp);fgets(string,20,fp);fgets(string,20,fp);puts(string);puts(string);fclose(fp);fclose(fp);第35页/共40页9.5 文件应用举例 9.5.19.5.1文件复制文件复制 9.5.2 9.5.2 存储在文件中的学生成绩排序存储在文件中的学生成绩排序第36页/共40页9.5.1 文件复制例例9-129-12 设计一个程序,实现任意文本文件的复制。设计一个程序,实现任意文本文件的复制。问题分析与算法设计问题分析与算法设计 由于源文件是任意的,所以源文件名应通过键盘输入;同样,由于源文件是任意的,所以源文件名应通过键盘输入;同样,生成的目标文件名也应由键盘输入。生成的目标文件名也应由键盘输入。源文件以只读方式打开,目标文件以写方式打开。源文件以只读方式打开,目标文件以写方式打开。从第一个字符开始,顺序逐字符读出源文件,每读出一个字从第一个字符开始,顺序逐字符读出源文件,每读出一个字符,立即写入目标文件中,使用符,立即写入目标文件中,使用feof()feof()函数判断源文件的结束状函数判断源文件的结束状态。态。l l实现程序实现程序实现程序实现程序#includevoid main()char ch,source20,target20;FILE*fp_s,*fp_t;printf(Enter the source filename:);scanf(%s,source);printf(Enter the target filename:);scanf(%s,target);if(fp_s=fopen(source,r)=NULL)printf(Cannot open source file.n);exit(1);if(fp_t=fopen(target,w)=NULL)printf(Cannot open target file.n);exit(1);while(!feof(fp_s)fputc(fgetc(fp_s),fp_t);fclose(fp_s);fclose(fp_t);第37页/共40页9.5.2 存储在文件中的学生成绩排序例例9-139-13 在在例例9-59-5中中,我我们们建建立立了了一一个个stu_liststu_list文文件件。编编写写程程序序,对该文件的内容按照学习成绩降序排序后显示出来。对该文件的内容按照学习成绩降序排序后显示出来。问题分析与算法设计问题分析与算法设计 定义定义struct student_typestruct student_type类型的结构体数组类型的结构体数组studstud。以只读方式打开以只读方式打开stu_liststu_list文件,将文件内容读出后存储到文件,将文件内容读出后存储到studstud数组中。数组中。对对studstud数组按数组按scorescore成员进行降序排序。成员进行降序排序。输出输出studstud数组。数组。l l实现程序实现程序实现程序实现程序l实现程序/*program e9-13.c*/#include#define N 4struct student_type char name10;int num;int score;studN,temp;void main()int i,j;FILE*fp;if(fp=fopen(stu_list,rb)=NULL)printf(Can not open file.n);exit(1);fread(stud,sizeof(struct student_type),N,fp);for(i=1;iN;i+)for(j=0;jN-i;j+)if(studj.scorestudj+1.score)temp=studj;studj=studj+1;studj+1=temp;for(i=0;iN;i+)printf(%-10s%4d%4dn,studi.name,studi.num,studi.score);fclose(fp);第38页/共40页小 结(1)(1)文件是计算机中的一个重要概念。C语言中的文件分为设备文件和磁盘文件两类,磁盘文件进一步分为ASCII码文件和二进制文件。打开文件是使用文件的第一步操作,使用fopen()函数实现,关闭文件是使用文件的最后一步操作,使用fclose()函数实现。(2)(2)任何打开的文件都对应一个文件指针,文件指针的类型是FILE型,它是在stdio.h中预

    注意事项

    本文(C语言程序设计文件程序设计.pptx)为本站会员(莉***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开