《C 语言10.ppt》由会员分享,可在线阅读,更多相关《C 语言10.ppt(26页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第第1010章章 文件文件章节:章节:节:节:Slide:10-1问题:问题:2010年年9月月哈尔滨工业大学计算机学院哈尔滨工业大学计算机学院第第第第1010章章章章 文件文件文件文件第第1010章章 文件文件章节:章节:节:节:Slide:10-2问题:问题:本章内容本章内容n文件的随机输入文件的随机输入/输出输出n文件概述文件概述nc c文件操作的实现文件操作的实现n文件的输入文件的输入/输出输出第第1010章章 文件文件章节:章节:节:节:Slide:10-3问题:问题:n计算机的内存容易健忘,所以数据必须保存在硬盘、软计算机的内存容易健忘,所以数据必须保存在硬盘、软盘、光盘和磁带等盘
2、、光盘和磁带等“不健忘不健忘”的外存上的外存上n这些能大量、永久保存信息的媒介,一般都以文件的形这些能大量、永久保存信息的媒介,一般都以文件的形式给用户及应用程序使用式给用户及应用程序使用n文件文件一般指存储在外部介质上具有名字(文件名)的一组相关数据一般指存储在外部介质上具有名字(文件名)的一组相关数据的集合的集合,这些数据是以记录的形式存放的这些数据是以记录的形式存放的用文件可长期保存数据,并实现数据共享用文件可长期保存数据,并实现数据共享n程序中的文件程序中的文件在程序运行时由程序在磁盘上建立的一个文件,并通过写操作在程序运行时由程序在磁盘上建立的一个文件,并通过写操作将数据存入该文件;
3、或由程序打开磁盘上的某个已有文件,并将数据存入该文件;或由程序打开磁盘上的某个已有文件,并通过读操作将文件中的数据读入内存供程序使用通过读操作将文件中的数据读入内存供程序使用文件概述文件概述第第1010章章 文件文件章节:章节:节:节:Slide:10-4问题:问题:文件缓冲区文件缓冲区程序数据区程序数据区输出一输出一个字符个字符输出一个输出一个数据块数据块读入一读入一个字符个字符读入一个读入一个数据块数据块输出文件缓冲区输出文件缓冲区输入文件缓冲区输入文件缓冲区磁盘磁盘内存内存外存外存第第1010章章 文件文件章节:章节:节:节:Slide:10-5问题:问题:C的文件的文件n 可显示的字符
4、流文件可显示的字符流文件(ASCII码文件码文件)n 不可显示的字符流文件不可显示的字符流文件(二进制二进制文件文件)ASCIIASCII码形式码形式二进制形式存放二进制形式存放00110001001100000011000000110000001100000010011100010000如:有一个整如:有一个整型数型数1000010000n 是由一个个字符数据顺序组成的。顺序的字符流文件是由一个个字符数据顺序组成的。顺序的字符流文件第第1010章章 文件文件章节:章节:节:节:Slide:10-6问题:问题:n数据必须按照数据必须按照存入存入的格式的格式读出读出,才能恢复其本来面貌,才能恢复
5、其本来面貌 n公开的标准格式公开的标准格式如如bmp、tif、gif、jpg和和mp3等类型的文件等类型的文件,有大量软,有大量软件能生成和使用这些类型的文件件能生成和使用这些类型的文件 n也有不公开、甚至加密的文件格式也有不公开、甚至加密的文件格式如如Microsoft Word的的doc格式就不公开,所以至今还没格式就不公开,所以至今还没有有Word以外的其它软件能完美地读出以外的其它软件能完美地读出doc文件文件 文件的格式文件的格式第第1010章章 文件文件章节:章节:节:节:Slide:10-7问题:问题:本章内容本章内容n文件的随机输入文件的随机输入/输出输出n文件概述文件概述nc
6、 c文件操作的实现文件操作的实现n文件的输入文件的输入/输出输出第第1010章章 文件文件章节:章节:节:节:Slide:10-8问题:问题:数据文件的建立和使用数据文件的建立和使用(1)1.说明文件的数据类型说明文件的数据类型(定义文件指针变量定义文件指针变量)FILE *变量名变量名;2.打开文件打开文件把所指定的文件从磁盘上找到把所指定的文件从磁盘上找到,并与缓冲区连接并与缓冲区连接把文件从磁盘上找到把文件从磁盘上找到,即找到文件的文件控制块即找到文件的文件控制块,并返回文件控制块的首址并返回文件控制块的首址程序和文件打交道时程序和文件打交道时,只需和文件指针变量名打交道只需和文件指针变
7、量名打交道打开文件函数调用语句打开文件函数调用语句 文件指针变量名文件指针变量名 =fopen (文件名文件名,文件使用方式文件使用方式););lC C规定文件路径用双反斜杠规定文件路径用双反斜杠l当文件不能打开当文件不能打开,无法返回文件控制块首址时无法返回文件控制块首址时,返回的是空指针返回的是空指针 NULLNULL文件指针文件指针变量名变量名第第1010章章 文件文件章节:章节:节:节:Slide:10-9问题:问题:数据文件的建立和使用数据文件的建立和使用(2)3.文件内容的操作文件内容的操作从文件中读取数据、把数据输出到文件中或文件位置的定位从文件中读取数据、把数据输出到文件中或文
8、件位置的定位4.关闭文件关闭文件 fclose(文件指针变量文件指针变量);程序和文件脱钩,指针不再指向指定文件名程序和文件脱钩,指针不再指向指定文件名输出结束时,缓冲区内容全部送入文件输出结束时,缓冲区内容全部送入文件第第1010章章 文件文件章节:章节:节:节:Slide:10-10问题:问题:本章内容本章内容n文件的随机输入文件的随机输入/输出输出n文件概述文件概述nc c文件操作的实现文件操作的实现n文件的输入文件的输入/输出输出第第1010章章 文件文件章节:章节:节:节:Slide:10-11问题:问题:文件的输入输出(文件的输入输出(1)n 文件的字符输入输出函数文件的字符输入输
9、出函数fgetc(fpfp););fputc (strstr,fpfp););功能:从指定文件功能:从指定文件fpfp中读入一个字符中读入一个字符 返回值:操作成功为输入的字符;失败或文件结束返回值为返回值:操作成功为输入的字符;失败或文件结束返回值为-1-1或(或(EOFEOF)文件指针文件指针变量变量 功能:将功能:将strstr的值输出到指定的文件的值输出到指定的文件fpfp中中返回值:成功为输出的字符;失败返回值为返回值:成功为输出的字符;失败返回值为-1-1要输出的要输出的字符字符文件指针文件指针变量变量第第1010章章 文件文件章节:章节:节:节:Slide:10-12问题:问题:
10、#include main()FILE *fp;char *p=C language program;if(fp=fopen(e:data1,w)=NULL)printf(This file cannot be opened.);exit(0);while(*p!=0)fputc(*p,fp);p+;fclose(fp);阅读程序,指出该程序的功能阅读程序,指出该程序的功能文件的输入输出(文件的输入输出(2)例题例题10-110-1第第1010章章 文件文件章节:章节:节:节:Slide:10-13问题:问题:#include main()FILE *fp;char ch80;int i=0;
11、if(fp=fopen(e:data1,r)=NULL)printf(This file cannot be opened.);exit(0);chi=fgetc(fp);while(chi!=EOF )printf(“%c”,chi);i+;chi=fgetc(fp);fclose(fp);文件的输入输出(文件的输入输出(3)例题例题10-210-2第第1010章章 文件文件章节:章节:节:节:Slide:10-14问题:问题:n 文件的字符串输入输出函数文件的字符串输入输出函数 fgets (strstr,n n,fp fp););文件的输入输出(文件的输入输出(4)文件指针文件指针变量变
12、量一次从文件读入一次从文件读入的字符个数的字符个数字符数组或初始化字符数组或初始化后的字符指针后的字符指针 功能:从指定功能:从指定fpfp文件中,输入指定的文件中,输入指定的n-1n-1个字符的字符串,把个字符的字符串,把 这些字符串放在指定的这些字符串放在指定的strstr的内存地址中的内存地址中返回值:成功为参数返回值:成功为参数strstr指定的指定的地址地址,失败或读到文件末尾时返回值为,失败或读到文件末尾时返回值为NULLNULL因此该函数从文件读取字符时,遇到下列情况之一结束:因此该函数从文件读取字符时,遇到下列情况之一结束:l读取了读取了n-1n-1个字符,返回个字符,返回st
13、rstr地址;地址;l读到换行符读到换行符nn或字符串结束符或字符串结束符00,返回,返回strstr地址;地址;l检测到文件尾,返回检测到文件尾,返回NULLNULL第第1010章章 文件文件章节:章节:节:节:Slide:10-15问题:问题:输出一个字符串的格式是输出一个字符串的格式是文件的输入输出(文件的输入输出(5)n 文件的字符串输入输出函数文件的字符串输入输出函数fputs(strstr,fp fp););功能:将功能:将strstr指向的字符串输出到指定的指向的字符串输出到指定的fpfp文件中文件中 返回值:操作成功返回值为返回值:操作成功返回值为0 0,否则返回值为,否则返回
14、值为非非0 0文件指针文件指针变量变量字符数组或初始化字符数组或初始化后的字符指针后的字符指针第第1010章章 文件文件章节:章节:节:节:Slide:10-16问题:问题:#include main()FILE*fp;char ch80,filename20;printf(“Please file name:”);gets(filename);if(fp=fopen(filename,w)=NULL)printf(cannot open filen);exit(0);gets(ch);while(strcmp(ch,”#”)fputs(ch,fp);fputs(“n”,fp);gets(ch
15、);fclose(fp);例题例题10-310-3文件的输入输出(文件的输入输出(5)第第1010章章 文件文件章节:章节:节:节:Slide:10-17问题:问题:n格式化文件输入输出格式化文件输入输出printf(“格式说明符格式说明符”,););scanf(“格式说明符格式说明符”,););fprintf(fpfp,“格式说明符格式说明符”,););fscanf(fpfp,“格式说明符格式说明符”,););文件格式化输入输出函数文件格式化输入输出函数文件的输入输出(文件的输入输出(5)文件指针文件指针变量变量格式说明符:格式说明符:%d%d、%f%f、%c%c、%s%s数据文件中的数据必
16、须用分隔符分开,最好用空格和回车数据文件中的数据必须用分隔符分开,最好用空格和回车第第1010章章 文件文件章节:章节:节:节:Slide:10-18问题:问题:#include#include#include struct studentlong num;char name20;int Eng,Com,Mth;;main()int i,j,p,term,sum5=0;struct student gread5,temp;FILE*fp;if(fp=fopen(d:1,r)=NULL)printf(cannot open file!n);exit(0);文件的输入输出(文件的输入输出(6)例题
17、例题10-410-4第第1010章章 文件文件章节:章节:节:节:Slide:10-19问题:问题:for(i=0;i5;i+)fscanf(fp,%ld%s%d%d%d,&greadi.num,greadi.name,&greadi.Eng,&greadi.Com,&greadi.Mth);fclose(fp);for(i=0;i 5;i+)/*计算总成绩计算总成绩*/sumi=sumi+greadi.Eng+greadi.Com +greadi.Mth;if(fp=fopen(d:2,“w)=NULL)printf(cannot open file!n);exit(0);文件的输入输出(文
18、件的输入输出(7)例题例题10-410-4第第1010章章 文件文件章节:章节:节:节:Slide:10-20问题:问题:for(i=0;i 4;i+)/*按总分排序按总分排序*/p=i;for(j=i+1;j 5;j+)if(sum p sum j )p=j;if(i!=p)term=sum i;sum i =sum p;sum p =term;temp=gread i;gread i =gread p;gread p =temp;例题例题10-410-4第第1010章章 文件文件章节:章节:节:节:Slide:10-21问题:问题:for(i=0;i5;i+)fprintf(fp,%ldt
19、%st%dt%dt%dt%dn,greadi.num,greadi.name,greadi.Eng,greadi.Com,greadi.Mth,sumi);fclose(fp);例题例题10-410-4第第1010章章 文件文件章节:章节:节:节:Slide:10-22问题:问题:n二进制数据块输入输出函数二进制数据块输入输出函数文件的输入输出(文件的输入输出(6)fread(缓冲区首地址缓冲区首地址,sizeof(数据类型数据类型),数据的个数数据的个数,文件指针变量文件指针变量)fwrite(缓冲区首地址缓冲区首地址,sizeof(数据类型数据类型),数据的个数数据的个数,文件指针变量文件
20、指针变量)该函数是将磁盘该函数是将磁盘(内存内存)中的二进制数据中的二进制数据,每次输入每次输入(输出输出)一一整块到内存整块到内存(磁盘磁盘)是内存中一块存储单元的首是内存中一块存储单元的首地址地址,数组名数组名,或一个已初始或一个已初始化的指针化的指针数据块的大小数据块的大小 =sizeof(数据类型数据类型)数据的个数数据的个数第第1010章章 文件文件章节:章节:节:节:Slide:10-23问题:问题:本章内容本章内容n文件的随机输入文件的随机输入/输出输出n文件概述文件概述nc c文件操作的实现文件操作的实现n文件的输入文件的输入/输出输出第第1010章章 文件文件章节:章节:节:
21、节:Slide:10-24问题:问题:数据文件的随机输入输出数据文件的随机输入输出(1)n文件定位文件定位文件头文件头当前位置当前位置文件尾文件尾这种对位置指针定位的操作称为这种对位置指针定位的操作称为文件的随机读写文件的随机读写调整文件位置指针的函数有三个调整文件位置指针的函数有三个:l文件位置指针定位函数文件位置指针定位函数 fseekl文件位置指针复位函数文件位置指针复位函数 rewindl文件位置指针查询函数文件位置指针查询函数 ftell第第1010章章 文件文件章节:章节:节:节:Slide:10-25问题:问题:数据文件的随机输入输出数据文件的随机输入输出(2)n位置指针函数的一般格式位置指针函数的一般格式:fseek(文件指针变量文件指针变量,调整字节总数调整字节总数,调整起始位置调整起始位置);rewind(文件指针变量文件指针变量);ftell(文件指针变量文件指针变量);指向要定指向要定位的文件位的文件第第1010章章 文件文件章节:章节:节:节:Slide:10-26问题:问题:
限制150内