C语言文件ppt...ppt

上传人:豆**** 文档编号:27520518 上传时间:2022-07-25 格式:PPT 页数:53 大小:590.50KB
返回 下载 相关 举报
C语言文件ppt...ppt_第1页
第1页 / 共53页
C语言文件ppt...ppt_第2页
第2页 / 共53页
点击查看更多>>
资源描述

《C语言文件ppt...ppt》由会员分享,可在线阅读,更多相关《C语言文件ppt...ppt(53页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、根据根据数据的组织形式数据的组织形式,数据文件可分为,数据文件可分为ASCII文件和二进制文件。文件和二进制文件。整数整数13297在内存中的存储形式以及分别按在内存中的存储形式以及分别按ASCII码形式和二进制形码形式和二进制形式输出如下图所示:式输出如下图所示:文件标识包括三部分:文件标识包括三部分:(1)文件路径文件路径;(2)主文件名主文件名;(3)文件后缀。文件后缀。文件路径表示文件在外部存储设备中的位置。文件路径表示文件在外部存储设备中的位置。 如:如: d: cc temp file1 . dat 文件路径文件路径 主文件名主文件名 文件后缀文件后缀主文件名的命名规则主文件名的命

2、名规则; ;后缀用来表示文件的性质,一般不超过后缀用来表示文件的性质,一般不超过3 3个字母。如:个字母。如:.doc (Word .doc (Word 文件文件) ),.txt (.txt (文本文件文本文件) ),.dat (.dat (数据数据文件文件) ) 。程序数据区输出文件缓冲区输出输入输入文件缓冲区输出输入磁盘内存内存文件名文件使用方式文件类型指针C程序操作系统磁盘在缓冲文件系统中,在缓冲文件系统中,每个被使用的文件每个被使用的文件都要在内存中开辟一个都要在内存中开辟一个FILE类型类型的文件信息区,存放文件的有关信息的文件信息区,存放文件的有关信息(文件名、文件状态、文件当前位

3、置文件名、文件状态、文件当前位置等等)。(1)打)打开开文件文件(2)文件)文件读写读写(3)关闭关闭文件文件 文件操作的步骤文件操作的步骤文件地址含有字符文件地址含有字符“”时一定要注意,因为时一定要注意,因为C语言会把字符语言会把字符看成转义字看成转义字符的开始标志,如写成符的开始标志,如写成fopen(c:c_programetest8-1.txt,r),会发生,会发生文件找不到的问题,因为编译器会把文件找不到的问题,因为编译器会把c看成转意字符(看成转意字符(c不是有效的转不是有效的转意字符,含义未定义)。意字符,含义未定义)。有两种方法可以解决这一问题,有两种方法可以解决这一问题,一

4、种方法是用一种方法是用双斜杠双斜杠代替单斜杠代替单斜杠如上面的地址所示。如上面的地址所示。另一种方法是用斜杠另一种方法是用斜杠/代替反斜代替反斜杠杠,如上面的路径可写成,如上面的路径可写成fopen(c:/c_programe/test8-1.txt,r)。例如:例如:FILE *fp; fp=fopen(c:c_programetest8-1.txt,r);FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Cannot open file of

5、 %s.n,file); exit (0); else return fp;为了以后方便打开文件并且判断是否正确打开文件,可为了以后方便打开文件并且判断是否正确打开文件,可将以上过程定义成函数,打开文件时调用该函数即可。将以上过程定义成函数,打开文件时调用该函数即可。磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:不关闭文件可能会丢失数据1).1).用用fputcfputc函数向文件函数向文件写入写入一个字符一个字符 调用形式调用形式: fputc ( ch: fputc ( ch,fp ) fp ) ; 函数功能函数功能: : 将字符(将字符(chch的值)输出到的值)输出到f

6、pfp所指向的文件中去。所指向的文件中去。 返返 回回 值值: : 如果输出成功,则返回值就是输出的字符;如果输出成功,则返回值就是输出的字符; 如果输出失败,则返回一个如果输出失败,则返回一个EOFEOF。1.字符读写函数字符读写函数fgetc()和和fputc()从键盘输入字符串,将该字符串加密后存储到磁盘文件从键盘输入字符串,将该字符串加密后存储到磁盘文件file.txt中,当输入字符中,当输入字符“”时停止输入。时停止输入。#include main( ) FILE *fp; char ch; fp=fopenfun(file.txt,w); while ( (ch=getchar(

7、) != ) /* 判断输入的是否为结束标志判断输入的是否为结束标志 */ ch=ch; /* 对输入的字符按位取反加密对输入的字符按位取反加密*/ fputc(ch, fp); /* 读入的字符写入磁盘文件读入的字符写入磁盘文件 */ fclose(fp); /* 关闭磁盘文件关闭磁盘文件 */FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Cannot open file of %s.n,file); exit (0); else retu

8、rn fp;2). 用用fgetc函数从文件函数从文件读入读入一个字符一个字符调用形式调用形式: ch= fgetc ( fp ) ; 函数功能函数功能: 从指定的文件中读取一个字符到变量从指定的文件中读取一个字符到变量ch中。中。 返返 回回 值值: 如读取成功,返回读取的字符,如果在执行如读取成功,返回读取的字符,如果在执行fgetc函数函数读字符时遇到文件结束符,函数返回一个文件结束标读字符时遇到文件结束符,函数返回一个文件结束标志志EOF(即即-1)。 1.字符读写函数字符读写函数fgetc()和和fputc()在屏幕上显示磁盘文件在屏幕上显示磁盘文件file.txt解密后的内容。解密

9、后的内容。#include main ( ) FILE *fp; char ch; fp = fopenfun (file.txt,r); /* 打开文件打开文件 */ while ( ( ch = fgetc(fp) )!=EOF) /* 从文件中读字符从文件中读字符 */ ch=ch; /* 对读取的字符按位取反解密对读取的字符按位取反解密*/ putchar(ch); /* 显示从文件读入的字符显示从文件读入的字符 */ fclose (fp); /* 关闭文件关闭文件 */FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( f

10、p = fopen (file, model) ) = NULL ) printf (Cannot open file of %s.n,file); exit (0); else return fp;2.字符串读写函数字符串读写函数fgets()和和fputs()例例7:将键盘输入的若干行字符串存入磁盘文件:将键盘输入的若干行字符串存入磁盘文件file.txt中。中。#include #include main( ) FILE *fp; char str81; int n,i; fp=fopenfun(“d:file.txt, w); printf(请输入您想输入的字符串个数:请输入您想输入的

11、字符串个数:n); scanf(%d%*c,&n); printf(请输入字符串:请输入字符串:n); for(i=0; in; i+ ) gets(str); fputs(str, fp);/*将该字符串送入磁盘文件将该字符串送入磁盘文件file.txt中去中去 */ fputs(n, fp); /*给字符串末尾存入回车换行符给字符串末尾存入回车换行符*/ fclose (fp);/* 操作结束关闭磁盘文件操作结束关闭磁盘文件 */FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model)

12、) = NULL ) printf (Cannot open file of %s.n,file); exit (0); else return fp;2.字符串读写函数字符串读写函数fgets()和和fputs()例例8:从键盘输入文件名,在屏幕上显示该文件内容:从键盘输入文件名,在屏幕上显示该文件内容。#include #include void main( ) FILE * fp; char file20, str80; int i=0; printf (Enter filename:); scanf(%s,file); fp = fopenfun (file, r); /* 打开文件打

13、开文件 */ while ( !feof(fp) ) fgets( str,80,fp );/*从文件中读出字符串从文件中读出字符串 */ printf (%s, str); fclose (fp);FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Cannot open file of %s.n,file); exit (0); else return fp;#include #include void main ( ) FILE *fp1,

14、*fp2; char file120, file220, s10; printf (Enter filename1:); scanf(%s,file1); printf (Enter filename2:); scanf(%s,file2); fp1 = fopenfun (file1, r); /* 打开文本文件打开文本文件1 */ fp2 = fopenfun (file2, w); /* 打开文本文件打开文本文件2 */ while (!feof(fp1) fgets( s,10,fp1 );/* 从文件从文件fp1中读出字符串中读出字符串 */ fputs( s, fp2 ); /*

15、将字符串写入文件将字符串写入文件fp2中中 */ fclose (fp1); fclose (fp2);例例9:复制文本文件。:复制文本文件。FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Cannot open file of %s.n,file); exit (0); else return fp;例:例: fprintf(fp,”%d,%6.2f”,i,t); fscanf (fp,”%d,%f”,&i,&t);3.格式读写函数格式读写函

16、数fscanf()和和fprintf()#include #include typedef struct Character char name32; int age; char skill32; CHARACTER;int main() FILE *fp; char *in_file_name = swordsman.txt; CHARACTER tmp; fp = fopenfun(in_file_name, w); scanf(%s, tmp.name); while(strcmp(tmp.name, * )!=0) scanf(%d %s, &tmp.age, tmp.skill);

17、fprintf(fp, %s %d %sn, tmp.name, tmp.age, tmp.skill); scanf(%s, tmp.name); fclose(fp); return 0;例例10:从键盘输入剑客档案资料,包括姓名,年龄和技能三项内容,将它们:从键盘输入剑客档案资料,包括姓名,年龄和技能三项内容,将它们写入写入swordsman.txt文件中保存,当输入文件中保存,当输入*时停止输入。时停止输入。FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL

18、) printf (Cannot open file of %s.n,file); exit (0); else return fp;#include #include typedef struct Character char name32; int age; char skill32; CHARACTER;int main() FILE *fp; char *in_file_name = swordsman.txt; CHARACTER tmp; fp = fopenfun(in_file_name, r); while( !feof(fp) ) fscanf(fp,%s %d %s,tm

19、p.name,&tmp.age, tmp.skill); printf(%s %d %sn, tmp.name, tmp.age, tmp.skill); fclose(fp); return 0;例例11 将上题所写的文件读出显示在屏幕上将上题所写的文件读出显示在屏幕上。FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Cannot open file of %s.n,file); exit (0); else return fp;1.数据块读

20、写函数数据块读写函数fread()和和fwrite()例 float f2; FILE *fp; for(i=0;i2;i+) scanf(%f,&fi); fp=fopen(aa.dat, wb); fwrite(f,4,2,fp);例例 struct student int num; char name20; char sex; int age; stud3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20; for(i=0;i3;i+) fwrite(&studi,sizeof(struct student),1,f

21、p);#include #include struct student int num; char name20; char sex; int age; stud3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20; void main() FILE *fp; int i; if (fp=fopen(d:ex8-4-1.txt,wb)=NULL) printf(Cannot open file); exit(1); for(i=0;i3;i+) fwrite(&studi,sizeof(struct student),1,

22、fp); fclose(fp); 例例12:fwrite(sam,sizeof(sam),1,fp)fwrite(sam,sizeof(sam),1,fp)语句中,从语句中,从sizeof(sam)sizeof(sam)可以看出数据可以看出数据块是以整个数组为单位的,故数据块块是以整个数组为单位的,故数据块个数为个数为1 1; fwrite(sam,sizeof(int),10,fp);fwrite(sam,sizeof(int),10,fp);数据块就以一个整数为单位,数据块就以一个整数为单位,这时,数据块个数应该是这时,数据块个数应该是1010。如:文件以二进制形式打开如:文件以二进制形式

23、打开 fread(f,4,2,fp); 此语句从此语句从fp所指向的文件中所指向的文件中读入读入2个个4个字节的数据,存储个字节的数据,存储到数组到数组 f 中。中。1.数据块读写函数数据块读写函数fread()和和fwrite()例 float f2; FILE *fp; fp=fopen(aa.dat, rb); fread(f,4,2,fp);for(i=0;i2;i+) fread(&fi,4,1,fp);例例 struct student int num; char name20; char sex; int age; float score3; stud10; for(i=0;i1

24、0;i+) fread(&studi,sizeof(struct student),1,fp);#include #include struct student int num; char name20; char sex; int age; stud3;void main() FILE *fp; int i; if (fp=fopen(d:ex8-4-1.txt,rb)=NULL) printf(Cannot open file); exit(1); for(i=0;i3;i+) fread(&studi,sizeof(struct student),1,fp); printf(%d %s

25、%c %dn,studi.num,studi.name,studi.sex,studi.age); fclose(fp); 例例 1 4 : 上 面 例 子 的 完 整 程 序: 上 面 例 子 的 完 整 程 序先写后读的例子#include #include FILE *fp;void main() int b5=1,2,3,4,5,a5,i; if (!(fp=fopen(d:ex8-4.dat,w+b) printf(Cannot open filen); exit(1); fwrite(b,sizeof(int),5,fp); rewind(fp); fread(a,sizeof(i

26、nt),5,fp); fclose(fp); for(i=0;i5;i+) printf(%d ,ai); 例例16 从键盘输入从键盘输入4个学生数据,把它们转存到磁盘文件中去个学生数据,把它们转存到磁盘文件中去(10-5.c)#include #define SIZE 4struct student_type char name10; int num; int age; char addr30;studSIZE;main() int i; for(i=0;iSIZE;i+)scanf(%s%d%d%s,studi.name,&studi.num, &studi.age,studi.addr)

27、; save(); display();void save() FILE *fp; int i; if(fp=fopen(d:stu_dat,wb)=NULL) printf(cannot open filen); return; for(i=0;iSIZE;i+) if(fwrite(&studi,sizeof(struct student_type),1,fp)!=1) printf(file write errorn); fclose(fp);void display() FILE *fp; int i; if(fp=fopen(d:stu_dat,rb)=NULL) printf(ca

28、nnot open filen); return; for(i=0;iSIZE;i+) fread(&studi,sizeof(struct student_type),1,fp); printf(%-10s %4d %4d %-15sn,studi.name, studi.num,studi.age,studi.addr); fclose(fp);前几节对文件的操作都是顺序读写,即从文件的第一个数据前几节对文件的操作都是顺序读写,即从文件的第一个数据开始,开始,文件位置指针文件位置指针自动移位,依次进行读写。自动移位,依次进行读写。 但在文件的实际应用中,还希望能直接读写文件中的某一个但在文

29、件的实际应用中,还希望能直接读写文件中的某一个数据项,而不是按文件的物理顺序逐个地读写数据项,这就数据项,而不是按文件的物理顺序逐个地读写数据项,这就要求对文件具有随机读写的功能,也就是强制将要求对文件具有随机读写的功能,也就是强制将文件位置指文件位置指针针指向用户所希望的位置。指向用户所希望的位置。C语言对文件的定位提供了三个语言对文件的定位提供了三个函数。函数。fseek(fp,offset,position);例如:例如:fseek(fp,50L,SEEK_SET); 其作用是将文件位置指针移到文其作用是将文件位置指针移到文件头起始第件头起始第50个字节处;个字节处;fseek(fp,1

30、00L,1); 是指将文件位置指针从当前位置向前(文件是指将文件位置指针从当前位置向前(文件尾方向)移动尾方向)移动100个字节个字节 ;fseek(fp,-20L,SEEK_END); 将文件位置指针从文件末尾向后将文件位置指针从文件末尾向后(文件头方向)移动(文件头方向)移动20个字节。个字节。用用rewind()函数可将文件指针移到文件的开头,其调用格式为:函数可将文件指针移到文件的开头,其调用格式为: rewind(fp);函数调用成功返回函数调用成功返回0值;否则,返回非值;否则,返回非0值。值。例如:例如: while (!feof(fp) putchar(fgetc(fp); r

31、ewind(fp); while (!feof(fp) putchar(fgetc(fp);可两次显示可两次显示fp所指的文件中的字符。所指的文件中的字符。 ftell函数的调用形式:函数的调用形式:FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Cannot open file of %s.n,file); exit (0); else return fp;#include void main( ) FILE *fp1; int a=1,3,5,7,b4; int len; fp1=fopen(“d:file4.dat”,“w+”); /简写的简写的fopen()fopen()语句语句 fwrite(a,4,4,fp1); fseek (fp1 , 0 , SEEK_END); len = ftell (fp1); rewind(fp1); fread(b,4,4,fp1); printf(%dn,b2); fclose(fp1); printf(the file2.txt is %d byten,len);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁