C语言文件的操作_第1页
C语言文件的操作_第2页
C语言文件的操作_第3页
C语言文件的操作_第4页
C语言文件的操作_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

工程八文件的操作工程要点:文件的概念以及文件类型指针文件的翻开和关闭文件的读写学习目标:掌握文件类型指针的定义方法掌握文件翻开和关闭的方法熟悉文件的读写方法C语言程序设计1工作任务导入工作任务在工程七的职工工资管理系统中,所涉及的数据量是比较大的,而我们每次运行程序时都需要通过键盘输入数据,非常麻烦,而且程序处理的结果也只能显示在屏幕上,无法保存。能否将输入/输出的数据以磁盘文件的形式存储起来,那样我们处理大批量数据的输入和输出问题将会变得十分方便。引导问题1、如何定义文件指针?2、如何实现文件的翻开和关闭?3、如何将从键盘上输入的信息保存到文件中?以及如何将文件中的数据导入到程序中?2任务1文件类型指针变量的定义

在职工工资管理系统中所涉及到的数据量是很大的,每次我们运行程序时都必须通过键盘将数据输入,输入的工作量很大,而且输出结果也无法保存。

使用文件就可以解决问题。怎么办?3文件

文件是一组相关数据的有序集合。每一个文件都有一个唯一的文件名。文件是外存中保存信息的最小单位。8.1文件4文件的分类在C语言中,文件被看成是由一个一个的字符或字节组成的。根据数据的组织形式,文件可分为文本文件和二进制文件两种。5文本文件又被称为ASCII文件,文本文件在磁盘中存放时每个字符对应一个字节,用于存放其对应的ASCII码。文本文件可在屏幕上按字符显示。

(1)二进制文件是将数据转换成二进制形式后存储起来的文件。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。

(2)说明:673/17/20248操作文件的一般步骤翻开文件读写文件关闭文件翻开文件:建立用户程序与文件的联系,为文件分配一个文件缓冲区。读写文件:是指对文件的读、写、追加和定位操作。关闭文件:切断文件与程序的联系,释放文件缓冲

区。

C语言的输入输出函数库中提供了大量的函数,用于完成对数据文件的建立、数据的读写、数据的追加等操作。

在程序中调用这些函数时,必须先用include命令包含stdio.h文件。

8对文件进行操作,需要使用文件指针。

文件指针是一种结构体类型变量,C编译系统已将结构体定义好,并命名为FILE,我们直接使用它定义就好。

FILE存放了文件名、文件状态标志及缓冲区大小等信息。FILE是一个类型名,它已经在头文件stdio.h中声明。8.1.2文件指针9定义文件指针变量的一般格式为:

FILE*指针变量标识符;

108.1.3任务实施

任务1定义一个文件指针变量。FILE*fp;fp是一个指向FILE类型结构体的指针变量。可以让fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。

11任务2文件的翻开和关闭任务分析对文件进行操作时,首先要定义文件指针,并将其与要操作的文件连接起来,这就需要将“文件翻开”;使用完文件后,还需要将“文件关闭”,防止数据的丧失。任务2将录入的职工信息放入到文件employee.txt,实现对该文件的翻开和关闭。

123/17/202413常用的调用形式:FILE*fp;fp=fopen(文件名,使用文件方式);文件名:需要翻开的文件名称(字符串)。使用文件方式:是具有特定含义的符号。8.2.1.文件翻开函数fopen()函数功能:按指定的使用文件方式翻开指定的文件。假设文件翻开成功,为该文件分配一个文件缓冲区和一个FILE类型变量,返回一个FILE类型指针;假设文件翻开失败,返回NULL。1314例如:fp=fopen(“d:\\c\\myfile.txt”,”r”);意义:是以“r”只读方式,翻开d:盘c目录下的myfile.txt文件,fp指向该文件。15另外,翻开文件后常会作一些文件读取或写入的动作,如果翻开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后常作错误判断及处理。因此常用以下程序段翻开文件:if((fp=fopen(“d:\\c\\myfile.txt”,”r”)==NULL){printf("\nerroronopenmyfile.txt!");exit(0);}16这段程序的意义是,如果返回的指针为空,表示不能翻开文件,那么给出提示信息“erroronopenmyfile.txt!”,然后执行exit(0)退出程序。需要说明的使用exit()函数,包含在头文件“stdlib.h”中。173/17/202418常用的调用形式:FILE*fp;fclose(fp);fp:已经翻开的文件指针。8.2.2.文件关闭函数fclose(

)函数功能:关闭fp指定的文件,释放该文件的缓冲区、FILE类型变量及文件指针。假设文件关闭成功,那么返回0;假设文件关闭失败,那么返回非0值。188.2.3任务实施

在职工工资管理系统中,我们将从键盘上录入的职工工资的信息写入到文本文件employee.txt文件中。首先,我们要翻开该文件。19

FILE*fp;if((fp=fopen(“d:\\employee.txt”,”w”)==NULL){printf("\nerroronopenmyfile.txt!");exit(0);}20任务3文件的读写

任务分析

实现文件的读写,在职工工资管理系统中,将从键盘上录入的职工信息写入到文件employee.txt中去,然后再从文件中将数据读出数据进行统计和处理。

21在C语言中提供了多种文件读写的函数。〔1〕字符读写函数:fgetc和fputc〔2〕字符串读写函数:fgets和fputs〔3〕数据块读写函数:fread和fwrite〔4〕格式化读写函数:fscanf和fprintf使用以上函数都要求包含头文件stdio.h。223/17/2024231、字符读写函数:fgetc和fputc①fgetc函数用于从指定的文件中读出一个字符。一般格式为:字符变量=fgetc(文件指针);功能:从指定的文件中读取一个字符到字符变量中。②fputc函数用于把一个字符写入到指定文件中。一般形式为:fputc(字符变量,文件指针);功能:将字符变量写入到指定的文件中去。

23从键盘输入一行字符,将其写入到d:\myfile.txt文件中,再把该文件的内容在屏幕上显示出来。分析:①以“w”方式,翻开文件d:\myfile.txt;②从键盘上接收字符,写入到d:\myfile.txt中;③关闭文件;④以“r”方式,翻开文件d:\myfile.txt;⑤从d:\myfile.txt文件中读出数据,显示到屏幕上;⑥关闭文件。24#include<stdio.h>main(){FILE*fp;/*定义一个文件指针变量fp*/intc;/*c为存放字符的变量*/charfilename[40];/*filename用于存放数据文件名*/printf("filename:");/*提示输入磁盘文件名*/gets(filename);if((fp=fopen(filename,"w"))==NULL){printf("Can'topenthe%s\n",filename);exit(0);}25/*键盘文件结束标志:输入Ctrl+z,显示^Z后回车*/while((c=getchar())!=EOF)putc(c,fp);/*将键盘输入的字符写到文件中*/fclose(fp);/*建立文件结束,关闭文件*/printf("outfile:\n");fp=fopen(filename,"r");/*以读方式翻开文本文件*/while((c=getc(fp))!=EOF)/*未读到文件结束标志时*/putchar(c);/*在显示器显示读出的字符*/fclose(fp);/*读文件结束,关闭文件*/}263/17/202427常用的调用形式:FILE

*fp;

feof(fp);

fp:文件指针变量。8.3.1文件结束测试函数函数功能:测试fp所指向的文件是否已读到文件尾部。假设该文件没有结束,那么返回0;假设文件结束,那么返回非0值。

对文本文件进行读操作时,例如fgetc()返回EOF,即可作文件结束处理。但在二进制文件中-1是合法数据,所以系统提供了一个适用对象更普遍的文件结束测试函数feof。273/17/202428常用的调用形式:FILE

*fp;

fputs(

str,

fp

);

str:需要输出的字符串,可以是字符串常量或字符串指针;fp:文件指针变量。字符串输出函数fputs(

)函数功能:将字符串〔不包括字符串结束标志'\0'〕写到文件指针fp所指向的文件中。假设输出操作成功,返回非0值;假设输出操作失败,那么返回0。283/17/202429常用的调用形式:FILE*fp;fgets(str,n,fp);str:字符指针,可以是字符数组名或字符指针变量;n:读取字符个数〔n-1〕。fp:文件指针变量。2.字符串输入函数fgets(

)函数功能:从fp所指向的文件中,读取n-1个字符后,加上字符串结束标志'\0'组成一个字符串,存入字符数组中。假设输入操作成功,返回字符数组的首地址;假设文件结束或输入操作失败,那么返回NULL。29例如:应用fputs和fgets函数,建立和读取文本文件。#include"stdio.h"#include"string.h"main(){FILE*fp;/*定义一个文件指针变量fp*/charfilename[40],str[81];printf("filename:");/*提示输入磁盘文件名*/gets(filename);if((fp=fopen(filename,"w"))==NULL)/*在磁盘中新建并翻开一个文本文件,同时测试是否成功*/{printf("Can'topenthe%s\n",filename);exit(0);}30while(strlen(gets(str))>0)/*键盘输入空串〔即仅输入回车〕那么输入全部结束*/{fputs(str,fp);/*将键盘输入的字符串写到文件中*//*在文件中参加换行符作为字符串分隔符*/fputc('\n',fp);}fclose(fp);/*建立文件结束,关闭文件*/printf("outfile:\n");fp=fopen(filename,"r");/*以读方式翻开文本文件*/while((fgets(str,81,fp))!=NULL)/*从文件读取字符串并测试文件是否已读完*/printf("%s",str);/*将文件中读取的字符串分行显示*/fclose(fp);/*读文件结束,关闭文件*/}313、数据块读写函数:fread和fwrite①fread函数从指定的文件中读入一组数据。一般格式为:fread(buffer,size,count,fp)功能:是从fp指向的文件的当前位置开始,读取count次,每次size大小的数据,放到buffer所指向的地址空间。②fwrite函数将一组数据写入到指定的文件中。一般格式为:fwrite(buffer,size,count,fp)功能:是将buffer指针所指的缓冲区中取出长度为size个字节,连续取count次,写到fp指向的文件中去。当调用成功时,返回实际写入的数据项数,否那么返回零值。324、格式化读写函数:fscanf和fprintf①fscanf函数是格式化输入函数。一般格式为:

fscanf(文件指针,格式控制串,输入项表)功能:按照“格式控制串”所指定的输入格式,从指定文件的中读出数据,然后再按照输入项地址表列的顺序,存入到相应的存储单元中。例如:

fscanf(fp,“%d%s”,&num,name);其意义是从fp所指向文件中读出一个整数放入num中,再读出一个字符串放到name中。33②fprintf函数是格式化输出函数。一般格式为:

fprintf(文件指针,格式控制串,输出项表);

功能:把输出项表中的项,按照“格式控制串”的格式写入到指定的文件中去。

例如:fprintf(fp,"%d%c",num,c);其意义是把num和c分别按照整型和字符型的格式写入到fp所指的文件中去。

fscanf和fprintf函数与前面学习过的scanf和printf函数的功能相似,都是格式化读写函数。它们的区别在于fscanf函数和fprintf函数的读写对象是磁盘文件,而scanf和printf函数的读写对象是键盘和显示器。

34练一练

对学生成绩管理系统进行改写,从键盘录入学生信息然后写入到student.txt文件中,然后再从文件student.txt中读取信息,显示在屏幕上。

358.3.2任务实施

在职工工资管理系统中,将从键盘上录入的职工信息写入到文件employee.txt中去,然后再从文件中将数据读出进行统计和处理。1、首先将从键盘上接收职工信息写入到文件employee.txt中。

2、从employee.txt文件读取数据,然后在屏幕上显示。

36#defineN5inttotal=N;/*记录职工总数值*/structemployee{longnum;charname[20];charsex;intage;chardepartment[20];intgrade;intsalary;};37voidmain(){structemployeee[10];FILE*fp;inti;if((fp=fopen("d:\\employee.txt","w"))==NULL)/*翻开文件*/{printf("Cannotopenfile!");exit(0);}printf("请输入%d名职工的信息:\n",N);/*从键盘上接收5名职工信息,然后写入到文件employee.txt中*/for(i=0;i<N;i++){ scanf("%ld%s%c%d%s%d%d",&e[i].num,e[i].name,&e[i].sex,&e[i].age,e[i].department,&e[i].grade,&e[i].salary);fprintf(fp,"%ld%s%c%d%s%d%d\n",e[i].num,e[i].name,e[i].sex,e[i].age,e[i].department,e[i].grade,e[i].salary);}fclose(fp);}①、fprintf函数在写入数据时,数据是不会自动换行的,所以必须要参加’\n’,来到达换行的目的。②、文件对结构体类型数据中的实型数据成员进行处理时,必须通过临时变量间接输入。即输入temp,然后再em[i].salary=temp。为方便起见,本例中salary改为int类型来处理。38voidmain(){structemployeee[10];FILE*fp; inti; if((fp=fopen("d:\\employee.txt","r"))==NULL)/*翻开文件*/{printf("Cannotopenfile!");exit(0);}printf("从文件中读取职工信息:\n");/*从文件employee.txt读取职工信息,然后显示在屏幕上*/for(i=0;i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论