您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > c语言程序设计与项目实践第13章
第13章文件本章的学习重点◆文件的概念◆文件的打开和关闭◆文件的读写◆文件的定位13.1文件和文件指针C语言中,为了方便数据的输入和输出,按存储格式的不同将数据分为不同的文件类型。程序中读写外部的文件需要使用文件指针,文件指针是C语言规定的用于读写文件的有效工具。13.1.1流和文件1.文本流和二进制流文本流(textstream):指流中的数据是以字符形式出现,每个字符以一个字节的ASCII码表示,例如,2010这个数,在文本流中,每个数字都使用与它对应的ASCII码表示,查附表1,得到2010的表示方法为:00110010001100000011000100110000,共占4个字节。二进制流:指流中的数据是二进制数字序列,对于字母,使用一个字节的二进制ASCII码61H表示,对于数字,使用一个字节的二进制数表示,对控制字符如’\n’等,不进行变换。在二进制流中,2010被作为数组转换为二进制形式:0000011111011010,共占2个字节。2.文本文件和二进制文件将以流表示的文件称为为流式文件,将文本流形式的数据文件称为文本文件,将二进制流形式的数据文件称为二进制文件。13.1.2文件指针定义文件类型的一般表达形式为:FILE*指针变量名;例如,可以定义下面的指向文件的指针变量:FILE*fp1,*fp2;上述定义表示fp1和fp2是指向FILE结构的指针变量上述定义表示fp1和fp2是指向FILE结构的指针变量,通过fp1和fp2即可找到存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文件的操作。习惯上也把fp1和fp2称为指向一个文件的指针。13.2文件的打开和关闭C语言中,文件的存在就是为了存储数据,和现在常用的word文件类似,在对文件进行读写操作时需要先将文件打开,对文件中的数据处理完毕之后要进行关闭操作。不同于word以及excel等文档类型的文件,C语言的文件打开和关闭需要使用文件指针以及调用文件处理函数来操作。13.2.1文件的打开打开一个文件需要使用文件指针和文件打开函数,文件打开的一般表达形式为:FILE*指针变量名;指针变量名=fopen(文件路径,文件打开方式);其中,指针变量名是FILE类型的指针变量,且必须是FILE类型。函数fopen返回类型为FILE的指针,若返回NULL,表明函数打开文件失败。例如,以只读方式打开在D盘下的二进制文件test.txt,可以使用下面的两条代码:FILE*fp=NULL;fp=fopen(“D:\\test.txt”,“rb”);其中,“D:\\test.txt”表示要打开D盘下的文件test.txt,”rb”表明以只读方式打开二进制文件。13.2.1文件的打开二进制文件:通常以后缀.bin表示,文本文件:通常以后缀.txt表示.文件的打开方式主要有:文件读、文件写和文件末尾添加数据。针对这些对文件的各种操作,C语言规定了12种文件打开方式,如表13.1所示为文件打开方式映射表。文件类型打开方式含义二进制文件“rb”以只读方式打开一个二进制文件“wb”以只写方式打开一个二进制文件,若文件不存在,则新建该文件名的二进制文件“ab”打开一个二进制文件,并将新输入的数据添加到文件末尾“rb+”以读写方式打开一个二进制文件“wb+”以读写方式打开一个二进制文件,若文件不存在,则新建该文件名的二进制文件“ab+”以读写方式打开一个二进制文件,并将新输入的数据添加到文件末尾文本文件“rt”以只读方式打开一个文本文件“wt”以只写方式打开一个文本文件,若文件不存在,则新建该文件名的文本文件“at”打开一个文本文件,并将新输入的数据添加到文件末尾“rt+”以读写方式打开一个文本文件“wt+”以读写方式打开一个文本文件,若文件不存在,则新建该文件名的立文本文件“at+”读写打开一个文本文件,允许读,或在文件末追加数据13.2.1文件的打开各字符的含义如下:r:read的缩写,设置对文件的“读”权限w:write的缩写,设置对文件的“写”权限a:append的缩写,设置对文件的末尾添加数据操作t:text的缩写,设置文件类型为文本文件b:banary的缩写,设置文件类型为二进制文件+:设置允许对文件进行“读”和“写”操作范例13.1FileOpen.c使用fopen函数以只读方式打开D盘下文件名为test.txt的文本文件,若打开成功,则输出成功信息,若不成功,表明D盘下没有该文件,此时,使用写方式打开文件,并检查D盘是否有新建文件test.txt。13.2.2文件的关闭C语言中,文件关闭的一般表达形式为:fclose(文件指针);文件指针:指接收fopen函数返回值的FILE类型的指针变量。函数fclose:返回int型的函数,当函数关闭文件成功时,返回0,否则返回EOF,EOF为系统定义的宏,默认时该宏被定义为-1。使用fclose函数时也应包含头文件stdio.h。范例13.2FileClose.c使用fopen函数以只读方式打开D盘下文件名为hellofriends.txt的文本文件,然后关闭打开的文件,并判断文件是否关闭成功。当D盘路径下没有文件hellofriends.txt时,输出结果为:错误:文件hellofriends.txt打开失败!并且,程序会出现崩溃性错误,如右图所示。13.3文件的读写文件打开时可以设置文件打开后的权限。主要文件处理函数如表所示。函数类别函数名功能字符处理函数fgetc字符读取函数fputc字符写入函数字符串处理函数fgets字符串读取函数fputs字符串写入函数数据块处理函数freed数据块读取函数fwrite数据块写入函数格式化处理函数fscanf格式化输入函数fprintf格式化输出函数13.3.1字符处理函数fgetc和fputc1.fgetc函数fgetc函数的功能是从打开的文件中读取一个字符数据,其一般表达形式为:变量=fgetc(文件指针);fgetc函数:返回值为字符型,一般以char型接收fgetc函数的返回值。文件指针:指接收fopen函数返回值的文件指针变量。例如:c=fgetc(fp);表示从文件指针fp所指的已打开的文件中读取一个字符,并将该字符赋给变量c。范例13.3Funcfgetc.c在D盘目录D:\C_language\下新建文本文件helloall.txt,并使用fgetc函数读取硬盘中的文本文件,使用putchar函数输出文件内读取出的字符。13.3.1字符处理函数fgetc和fputc2.fputc函数fputc函数的功能是向打开的文件中写入一个字符数据,其一般表达形式为:变量=fputc(字符,文件指针);fputc函数:返回值为整型,一般以int型接收fputc函数的返回值。字符:指要写入的字符数据。文件指针:指接收fopen函数返回值的文件指针变量。例如:i=fputc(‘m’,fp);表示向文件指针fp所指的已打开的文件中写入一个字符’m’。若写入成功,则返回写入的字符值,否则返回EOF。实训13.1——建立readme文件许多文件或安装程序包中都含有自述文件,通常命名为readme,这些文件都是为了说明文件的使用方法或者程序的安装方法。在计算机路径D:\C_language\下新建并打开一个readme文件,使用fputc函数向该文件中输入一个关于C语言的简单说明文档,以字符’#’号结束。然后使用fgetc函数输出文件的内容。1.需求分析:需求1:新建并打开一个文件名为readme的文本文件需求2:使用fputc函数按字符输入说明文档,当输入’#’号时,结束输入需求3:使用fgetc函数按字符输出说明文档,直到文件结束需求4:文件处理完毕后,关闭文件2.技术应用对于需求1,使用fopen函数,”wt+”方式打开文件readme.txt,当指定路径D:\C_language\下该文件不存在时,系统自动新建该文件,并将其打开。对于需求2,新建子函数write_readm(),输入说明文档信息,当输入’#’号时,输入结束。函数结束时应处理文件指针,使其指向文件开头。对于需求3,新建子函数read_readm(),输出说明文档信息。对于需求4,函数调用结束后,调用函数fclose关闭文件。13.3.2字符串处理函数fgets和fputs1.fgets函数fgets函数的功能是从打开的文件中读取一段字符串到字符数组中,其一般表达形式为:fgets(字符数组名,n,文件指针);字符数组名:已定义的字符数组,n是正整数,表示从文件中读取含有n-1个字符的字符串。文件指针:指接收fopen函数返回值的文件指针变量。例如:chararray_ch[100];fgets(array_ch,20,fp);表示从文件指针fp所指的已打开的文件中读取长度为19的字符串,并将该字符串放进字符数组array_ch中。范例13.4Funcfgets.c在D盘目录D:\C_language\下新建文本文件ExpoEmblem.txt,使用fgets函数读取长度为50的该文本文件字符串,并打印出读取的字符串。13.3.2字符串处理函数fgets和fputs2.fputs函数fputs函数的功能是向打开的文件中写入一段字符串,其一般表达形式为:变量=fputs(字符串,文件指针);变量:int型或char型变量。字符串:指要写入的字符串数据,它可以是字符串常量,也可以是字符数组名,也可以是指向字符串的字符指针。文件指针:指接收fopen函数返回值的文件指针变量。例如:i=fputs(“Welcome!”,fp);表示向文件指针fp所指的已打开的文件中写入一段字符串”Welcome”。若写入成功,则返回写入的字符值,否则返回EOF。范例13.5Funcfputs.c在D盘目录D:\C_language\下新建并打开文本文件NewWorld.txt,使用fputs函数写入一段字符串,并使用fgets函数将输入的字符串原样输出。13.3.3数据段处理函数fread和fwrite1.fread函数数据段读取函数fread调用的一般形式为:fread(文件指针1,size,n,文件指针2);文件指针1:指向有效内存空间的地址变量名或数组名。size:要读取的数据段大小。n:要读取的次数。文件指针2:指接收fopen函数返回值的文件指针变量。例如:要读取2次文件指针fp所指的文件中200字节大小的数据段,并将这段数据放到数组array中,可以使用下面的语句:intarray[300];fread(array,200,2,fp);当对这段数据只读一次时,可以将表示次数的参数设为1,但不能省略。调用fread函数时,所处理的文件必须是以读或读写方式打开的文件。13.3.3数据段处理函数fread和fwrite2.fwrite函数数据段写入函数fwrite可以按照规定的字节数向打开的文件中写入一段数据,其一般表达形式为:变量=fwrite(文件指针,size,n,文件指针);函数中的参数如文件指针、size等与fread函数类似,区别在于fwrite函数是将指针名所指的内存区域中size字节单元数据写入到文件n次。例如:要向文件中写入一个结构体类型的数据,可以使用下面的代码:01structProject02{03charProjectName[32];04intProjectIncome;05}Lte={“LTE_eNodeB”,23500};06i=fwrite(&Lte,sizeof(structProject),1,fp);//向文件中写入数据段上述代码表示向文件指针fp所指的已打开的文件中写入一段结构体数据。实训13.2——项目信息录入与输出WCDMA项目和LTE项目是当前通信领域中体现3G和4G网络的主要通信架构,设计一个方案,将两个项目的主要信息存储到指定目录的文件中,并输出该项目信息,项目信息包括项目名称、项目负责人、项目收益、项目支出和项目起止时间等。
本文标题:c语言程序设计与项目实践第13章
链接地址:https://www.777doc.com/doc-3524696 .html