1、C语言程序设计 高等教育出版社 新形态一体化教材单元十文件:存储在外部介质上数据的集合.文件分类:按文件的逻辑结构:记录文件和流式文件按存储介质:普通文件和设备文件按数据的组织形式:文本文件和二进制文件 第第1步:打开书本步:打开书本读书/写书 第第2步:读书或写字步:读书或写字 第第3步:合上书本步:合上书本读写文件 第第1步:打开文件步:打开文件 第第2步:读或写数据步:读或写数据 第第3步:关闭文件步:关闭文件【问题1】如何将程序运行结果数据保存成文件,以备将来使用。【问题2】程序处理的原始数据是从某个文件中读取出来的。1文件操作基本思路2文件的打开与关闭3文件读写操作4文件检测和定位函
2、数 文件操作基本思路1文件操作基本思路读写文件 第第1步:打开文件步:打开文件 第第2步:读或写数据步:读或写数据 第第3步:关闭文件步:关闭文件文件指针变量定义格式文件指针变量定义格式:FILE FILE *文件指针变量名文件指针变量名;fopen();fgetc()/fputc()、fscanf()/fprintf()等等fclose();FILE *fp;其中其中FILEFILE必须大写必须大写*表示定义的变量是指针类型表示定义的变量是指针类型利用文件指针,结合文件操作函数进行1文件操作基本思路2文件的打开与关闭3文件读写操作4文件检测和定位函数 文件的打开与关闭2文件的打开与关闭引例
3、FILE *fp;fp=fopen(“e:test.dat”,”r”);fclose(fp);/文件指针文件指针/打开文件打开文件/关闭文件关闭文件打开哪个文件打开哪个文件以何种方式打开以何种方式打开2文件的打开与关闭文件打开fopen()(1)格式(2)返回值文件指针名文件指针名=fopenfopen(文件名文件名 ,文件打开方式文件打开方式);正常打开,返回正常打开,返回文件指针文件指针(地址地址)打开失败,返回打开失败,返回空指针空指针(NULL)(NULL)r -只读方式w -新建文件,写数据a -文件尾追加写数据t -组合使用,按文本文件操作b -组合使用,按二进制操作+-组合使用,
4、以读写方式打开【例【例10-210-2】打开当前目录中的打开当前目录中的test.dattest.dat文件,判断并输出文件打开状态信息。文件,判断并输出文件打开状态信息。(3)示例2文件的打开与关闭随堂练习(1)定义一个文件指针 fpin,指向以只读方式打开的文本文件“d:testin.dat”。(2)定义一个文件指针fpout,指向以只写方式打开的文本文件“d:testout.dat”。2文件的打开与关闭文件关闭fclose()(1)格式(2)返回值(3)示例fclosefclose(FILE(FILE*fpfp);正常关闭,返回值为正常关闭,返回值为0 0 异常关闭,返回值为异常关闭,返
5、回值为非非0 0fclosefclose(fpfp);思考:若异常关闭文件,可能导致的问题?1文件操作基本思路2文件的打开与关闭3文件读写操作4文件检测和定位函数 文件读写操作3文件读写操作按字符读写fgetc()/fputc()fp=fopen(“e:test.dat”,”r”);ch=fgetc(fp);(2)fgetc()的使用 返回读取到的字符返回读取到的字符 读到文件尾时,返回读到文件尾时,返回值值为为 文件结束文件结束标志标志EOF(-1)EOF(-1)u 返回值u 格式及示例【例【例10-6】fp=fopen(“e:test.dat”,”w”);fputc(ch,fp);若写入成
6、功,若写入成功,返回写入返回写入的字符的字符 若写入失败,返回若写入失败,返回EOF(-1)EOF(-1)。(1)fputc()的使用u 格式及示例u 返回值【例【例10-4】3文件读写操作按字符读写fgetc()/fputc()【练习】利用fputc()和fgetc()函数将文件test.dat复制为test.bak。3文件读写操作按字符串读写fgets()/fputs()fp=fopen(“e:test.dat”,”r”);(2)fgets()的使用u 返回值u 格式及示例char str100;fgets(str,n,fp);/fp读取n-1个字符存入str中 读成功,读成功,返回存入返
7、回存入字符串的字符串的地址地址 读读失败失败,返回一个空指针返回一个空指针NULLNULL【例【例10-10】fp=fopen(“e:test.dat”,”w”);(1)fputs()的使用u 格式及示例u 返回值【例【例10-8】写写成功,函数返回值为非负整数成功,函数返回值为非负整数 写写失败失败,返回返回EOF(-1)EOF(-1)fputs(“I love China.”,fp);/字符串可以是常量、指针或数组3文件读写操作按字符串读写fgets()/fputs()读取结果是什么?【分析】char str100;FILE*fp;fp=fopen(“test.txt”,“r”);fget
8、s(str,80,fp);3文件读写操作按格式化读写fprintf()/fscanf()(1)fprintf()的使用u 格式及示例(2)fscanf()的使用u 格式及示例【例【例10-14】【例【例10-12】fprintf(fp,%d,%d,10,20);fprintf(fp,%lf,n);fprintf(fp,%s,How are you.);fscanf(fp,%d%d,&a,&b);fscanf(fp,%lf,&n);fscanf(fp,%s,str);写写成功,返回写入文件的字节个数成功,返回写入文件的字节个数 写写失败失败,则返回一个则返回一个负数负数u 返回值 读读成功,返回
9、读取成功,返回读取数据的数据的个数个数 读失败,读失败,返回返回EOFEOFu 返回值 提示:fscanf读取非单字符数据时 默认的间隔符为:空格 制表符t 换行符n 3文件读写操作按格式化读写fprintf()/fscanf()【练习】从键盘输入如下表格中三个学生数据,写入文件stu.dat中,再从文件中读出这些数据显示在屏幕上,使用格式化读写文件函数完成。学号学号姓名姓名年龄年龄住址住址1601王帅18凤凰御景小区1602李想17御龙翰府小区1603张扬19文轩名苑小区3文件读写操作按数据块读写fread()/fwrite()int s10=1,2,3,4,5,6,7,8,9,0;fwri
10、te(s,sizeof(int),10,fp);(1)fwrite()的使用u 格式及示例(2)fread()的使用u 格式及示例【例【例10-18】【例【例10-16】u 返回值u 返回值 写写成功,成功,返回返回写写入数据项入数据项个数个数 写写失败,失败,返回返回0 0int a10;fread(a,sizeof(int),10,fp);读读成功,返回读取成功,返回读取到的数据项到的数据项个数个数 读失败读失败或或读到文件末尾读到文件末尾返回返回0 03文件读写操作按数据块读写fread()/fwrite()【练习】从键盘输入如下表格中三个学生数据,写入文件stu.dat中,再从文件中读
11、出这些数据显示在屏幕上,使用数据块读写文件函数完成。学号学号姓名姓名年龄年龄住址住址1601王帅18凤凰御景小区1602李想17御龙翰府小区1603张扬19文轩名苑小区1文件操作基本思路2文件的打开与关闭3文件读写操作4文件检测和定位函数 文件检测和定位函数4文件检测和定位函数文件检测函数(1)文件结束检测函数feof()(2)读写文件出错检测函数ferror()(3)文件出错标志和文件结束标志置0函数clearerr()函数格式:函数格式:函数格式:feof(文件指针);ferror(文件指针);clearerr(文件指针);【例10-19】函数功能:检测文件位置指示器是否到达了文件结尾 返
12、回值:到文件尾,返回一个非0值,否则返回0 函数功能:测试文件是否出现错误 返回值:未出错,0;出错,非0 函数功能:使文件错误标志置为0 返值:无4文件检测和定位函数文件定位函数(1)设置文件指位置指针fseek()函数格式:fseek(文件指针,偏移量,基准);【概念】文件位置指针-指向当前读写位置的指针。符号常量 数值 含义 SEEK_SET 0 文件开头 SEEK_CUR 1 当前位置 SEEK_END 2 文件末尾 u 偏移量u 基准 长整型数据 函数功能:改变文件位置指针的位置 返回值:成功,返回0;失败,返回非0值4文件检测和定位函数文件定位函数(2)获取文件指针位置ftell(
13、)(3)文件位置指针复位rewind()函数格式:ftell(文件指针);函数格式:rewind(文件指针);函数功能:返回位置指针当前位置(用相对文件开头的位移量表示)返回值:成功,返回当前位置指针位置;失败,返回-1L。函数功能:重置文件位置指针到文件开头 返回值:无4文件检测和定位函数随堂练习利用学过的函数获得计算机中任意一个文件的长度。1文件操作基本思路2文件的打开与关闭3文件读写操作4文件检测和定位函数FILE *fp;fgetc()/fputc()、fscanf()/fprintf()fgets()/fputs()、fread()/fwrite()feof()、ferror()、clearerr()fseek()、ftell()、rewind()p 文件指针p 文件读写函数p 文件检测函数p 文件指针定位函数