第9讲 文件(1)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

目前我们所编写的程序中,数据多是通过键盘输入,存放在变量、数组或链表中,但它们仅能临时存储数据,程序运行结束后数据就丢失了为了方便输入数据、保存数据,引入文件文件通常长期存放在外部存储设备中,如硬盘、磁盘、光盘、U盘、磁带等。在我们需要时,从这些存储设备上读取文件数据本讲内容:(1)文件的概念(2)文件的类别(3)文件类型指针(4)文件的打开与关闭(5)文件的字符读写函数(6)文件的字符串读写函数第9讲文件(1)文件:指存储在外部介质上的数据的集合操作系统是以文件为单位对数据进行管理的。数据必须通过文件进行存储文件除了包括磁盘上存储的内容外,从操作系统的角度看,与主机相连的各种输入输出设备也是文件。例如:键盘是标准输入文件stdin显示器是标准输出文件stdout文件的概念文件建立在目录(文件夹)下,同一级目录里保存的文件不能同名文件的唯一标识是其存放路径+文件名例:文件getnum.c的路径是D:\home\Sunner\Secrets\getnum.c例:怎样区分两个main.c文件?D:\home\Sunner\Secrets\main.cD:\Backup\main.c文件的概念C语言把文件看作是一个以字节为基本单位的序列,即文件是由一个字节一个字节的数据顺序组成的根据数据的组织形式把文件分为两类:文本文件和二进制文件文本文件(也称ASCII文件)文本文件将任何数据看作字符串形式,每一个字节存放一个字符(ASCII码)。二进制文件数据按其在内存中的存储形式存放在文件中优点:字符型数据存、取方便缺点:数值型数据,需要ASCII码形式到二进制形式的转换优点:数值型数据存、取方便缺点:数值型数据不能直接输出字符形式文件的类别例:设有一整数2460:2460在文本文件中的存储形式:001100100011010000110110001100002460在二进制文件中的存储形式:2460=211+28+27+24+23+22字符’2’50字符’4’52字符’6’56字符’0’4800001001100111000000000000000000文件的类别定义文件类型指针变量格式:FILE*指针变量名;注意:1.只有通过文件指针变量才能访问相应的文件2.FILE必须大写文件的访问需要通过定义文件类型指针变量文件类型指针操作文件的步骤:1.定义文件指针变量,FILE*fp2.打开文件,fp=fopen(“文件名”,“r”)3.向文件写入数据或从文件读取数据fputc(ch,fp);ch=fgetc(fp);4.关闭文件,fclose(fp)变化多端文件类型指针voidSaveFile(){charch;FILE*fp;fp=fopen(letter.dat,w);for(ch='A';ch='Z';ch++)fputc(ch,fp);fclose(fp);}//定义一个文件指针变量//打开文件操作//判断文件打开是否成功//将字符ch写入到文件中//关闭文件if(fp==NULL){printf(Openingfileerror!\n);exit(0);}例:将字符’A’—’Z’写入文件letter.dat中保存起来文件类型指针fopen函数函数原型:FILE*fopen(char*filename,char*mode);函数的返回值是一个文件地址,赋给一个文件指针变量需要打开的文件名打开文件的方式(只读)让文件类型指针变量指向被打开的文件例:FILE*fp;fp=fopen(“file1.txt”,“r”);使用格式:文件类型指针变量=fopen(文件名,文件打开方式);文件的打开文件的打开与关闭打开文件时,因打开方式不对或其他原因,可能会使打开文件操作失败,这时fopen函数的返回值是NULL,所以在打开文件时通常需要判断一下打开操作是否成功if((fp=fopen(“file1.txt”,“r”))==NULL){printf(“Cannotopenthisfile!\n”);exit(0);}说明:exit函数的作用是关闭所有文件,结束程序,注意:使用exit函数要包含头文件stdlib.h文件的打开文件的打开与关闭if((fp=fopen(“file1.txt”,“r”))==NULL){printf(“Cannotopenthisfile!\n”);exit(0);}if((fp=fopen(“e:\\data\\file2.txt”,“r”))==NULL){printf(“Cannotopenthisfile!\n”);exit(0);}文件的打开如果文件不在当前目录下,应写出文件的完整路径说明:在双引号中用2个斜杠表示1个斜杠如果文件在当前目录下,即.cpp源程序所在目录文件的打开与关闭(1)“r”与“rb”只读(2)“w”与“wb”只写文件的打开方式“r”只读打开一个文本文件,“rb”只读打开一个二进制文件以此方式打开文件,该文件必须已经在磁盘中存在“w”只写打开一个文本文件,“wb”只写打开一个二进制文件以此方式打开文件,如有同名文件(即文件已存在),则将原有文件删除并建立一个新文件;如没有同名文件(即文件不存在),则建立一个新文件文件的打开与关闭文件的打开方式(3)“a”与“ab”追加(4)“r+”与“rb+”读/写“a”追加打开一个文本文件,“ab”追加打开一个二进制文件以此方式打开文件,如文件已存在,则将当前读写位置位于文件末尾,可以追加数据;如文件不存在,则建立一个新文件“+”表示即能读又能写“r+”或“rb+”方式打开文件时,文件必须已经存在文件的打开与关闭(6)“a+”与“ab+”读/写文件的打开方式(5)“w+”与“wb+”读/写“w+”或“wb+”方式打开文件时,建立一个新文件(如文件已存在,则将原文件覆盖)“a+”或“ab+”方式打开文件时,如文件已存在,可在文件末尾追加数据;如文件不存在,则建立一个新文件文件的打开与关闭文件打开方式汇总表以读/写方式打开一个二进制文件“ab+”向二进制文件末尾追加数据“ab”以读/写方式建立一个新的二进制文件“wb+”以只写方式建立一个新的二进制文件“wb”以读/写方式打开一个二进制文件“rb+”以只读方式打开一个二进制文件“rb”以读/写方式打开一个文本文件“a+”向文本文件末尾追加数据“a”以读/写方式建立一个新的文本文件“w+”以只写方式建立一个新的文本文件“w”以读/写方式打开一个文本文件“r+”以只读方式打开一个文本文件“r”含义使用方式二进制文件文本文件文件的打开与关闭文件的关闭fclose函数的作用:将文件指针变量所指向的文件关闭fclose函数注:不论用什么方式打开文件,关闭文件的方法都一样函数原型:int*fclose(FILE*fp);函数的返回值是一个整数,关闭成功返回0,出错返回EOF文件的打开与关闭字符的写入函数函数原型:intfputc(intch,FILE*fp);函数功能:将字符ch写入fp所指向的文件中函数返回值:成功时返回该字符,失败时返回EOF说明:写入一个字符后,文件位置指针将自动指向下一个字节charch;FILE*fp;if((fp=fopen(“file1.txt”,“w”))==NULL){printf(“Cannotopenthisfile!\n”);exit(0);}fputc(‘s’,fp);ch=‘t’;fputc(ch,fp);//将字符常量‘s’写入fp指向的文件file1中//将字符变量ch中存放的字符‘t’写入fp指向的文件file1中fputc函数文件的字符读写函数例:从键盘输入一行字符,写到文本文件string.txt中#includestdio.h#includestdlib.hvoidmain(){FILE*fp;charch;if((fp=fopen(string.txt,w))==NULL){printf(can'topenfile\n);exit(0);}do{ch=getchar();fputc(ch,fp);}while(ch!='\n');fclose(fp);}//从键盘输入一个字符//将ch中的字符写到文件中文件的字符读写函数字符的读取函数函数原型:intfgetc(FILE*fp);函数功能:从fp所指向的文件中读取一个字符,并将其返回函数返回值:成功时返回该字符,失败或文件结束时返回EOF说明:读取一个字符后,文件位置指针将自动指向下一个字节charch;FILE*fp;if((fp=fopen(“file1.txt”,“r”))==NULL){printf(“Cannotopenthisfile!\n”);exit(0);}ch=fgetc(fp);printf(“%c\n”,ch);fgetc函数文件的字符读写函数voidmain(){FILE*fp_in,*fp_out;charch,infile[20],outfile[20];}例:将一个文本文件的内容复制到另一个文件中scanf(%s,infile);if((fp_in=fopen(infile,r))==NULL){printf(can'topenfile:%s,infile);exit(0);}scanf(%s,outfile);if((fp_out=fopen(outfile,w))==NULL){printf(can'topenfile:%s,outfile);exit(0);}while(){ch=fgetc(fp_in);fputc(ch,fp_out);}fclose(fp_in);fclose(fp_out);用字符数组名,不加双引号feof函数检查文件是否结束,结束返回非零值,否则返回零文件的字符读写函数!feof(fp_in)字符串读取函数函数原型:char*fgets(char*buf,intn,FILE*fp);函数功能:从fp所指向的文件中读取一个长度为(n-1)的字符串,并在其后自动加一个‘\0’,然后将其存放在起始地址为buf的空间内如果读入(n-1)个字符前遇到换行符或文件结束符,则结束读入函数返回值:成功时返回字符串的首地址,失败或文件结束时返回NULL说明:buf--字符数组名,n--字符个数,fp--文件指针变量fgets函数文件的字符串读写函数例:将文本文件中的内容显示到屏幕上FILE*fp;charstring[81],filename[20];while(fgets(string,81,fp)!=NULL)printf(%s,string);gets(filename);if((fp=fopen(filename,r))==NULL){printf(can'topenfile!\n);exit(0);}fclose(fp);文件的字符串读写函数字符串写入函数函数原型:intfputs(char*str,FILE*fp);函数功能:将str字符串写到fp所指向的文件中,但‘\0’不写入文件函数返回值:成功时返回0,出错时返回EOF说明:str—字符串常量或字符数组名或字符指针变量fp—文件指针变量fputs函数文件的字符串读写函数例:在文本文件string.txt末尾添加若干行字符FILE*fp;chars[81];当输入空行(即单独一个回车符)时结束向文件中输入一个换行符if((fp=fopen(string.txt,a))==NULL){printf(can'topenfile\n);exit(0);}while(strlen(gets(s))0){fputs(s,fp);fputc(‘\n’,fp);}fclose(fp);文件的字符串读写函数Assignment从键盘输入一个字符串,将其中的小写字母全部转化成大写字母,然后输出到‘test.txt’文件中。上机练习文件的打开、读写与关闭基本操作toupper():将ch字符转换成大写字母_strupr()

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功