中国高校课件下载中心 》 教学资源 》 大学文库

中国农业大学:《C语言程序设计》课程教学课件(PPT讲稿)第09章 文件

文档信息
资源类别:文库
文档格式:PPT
文档页数:26
文件大小:530KB
团购合买:点击进入团购
内容简介
中国农业大学:《C语言程序设计》课程教学课件(PPT讲稿)第09章 文件
刷新页面文档预览

第十三章文件 在前面的程序中,是把数据保存到内存变量里,数 据的处理完全由程序控制。当程序运行结束后,所有变 量被释放。 另外,一般程序都会有数据的输入输出,如果输入/ 输出的数据量不大,则在程序运行时通过键盘输入可解 决;当输入/输出量很大时,就不方便了。 文件就是解决上述问题的有效办法。把程序中使用的 大量数据,通过编辑工具事先存储在磁盘文件中,得以 长期保存。当程序运行时就从这个数据文件中读入,从 而实现数据一次输入多次使用。 同样,当有大量数据输出时,可以将其输出到指定文 件中,不受屏幕大小限制,且任何时候都可查看文件结 果。一个程序的运行结果还可作为另外程序的输入

第十三章 文件 在前面的程序中,是把数据保存到内存变量里,数 据的处理完全由程序控制。当程序运行结束后,所有变 量被释放。 另外,一般程序都会有数据的输入/输出,如果输入/ 输出的数据量不大,则在程序运行时通过键盘输入可解 决;当输入/输出量很大时,就不方便了。 文件就是解决上述问题的有效办法。把程序中使用的 大量数据,通过编辑工具事先存储在磁盘文件中,得以 长期保存。当程序运行时就从这个数据文件中读入,从 而实现数据一次输入多次使用。 同样,当有大量数据输出时,可以将其输出到指定文 件中,不受屏幕大小限制,且任何时候都可查看文件结 果。一个程序的运行结果还可作为另外程序的输入

§9.1C文件概述 ★文件:存储在外部介质上数据的集合,是操作系统 数据管理的单位 ★北 使数据蒌件的目的 个、数据文件的改动不引起程序的改动一 程序与数据分离 2公摔将瀚顾访问同一数据文件中的数据—一数据共享 3、能悟蝴程旁侨镞皮钢数结果彝掃) ●设备文件:非存储介质(键盘、显示器、打印机等) 按数据的组织形式: ●文本文件:ASCⅡ文件,每个字节存放一个字符的ASCⅡ码 ●二进制文件:数据按其在内存中的存储形式原样存放

§9.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统 数据管理的单位 使用数据文件的目的 1、数据文件的改动不引起程序的改动——程序与数据分离 2、不同程序可以访问同一数据文件中的数据——数据共享 3、能长期保存程序运行的中间数据或结果数据 文件分类 ❖按存储介质: ⚫普通文件:存储介质文件(磁盘、磁带等) ⚫设备文件:非存储介质(键盘、显示器、打印机等) ❖按数据的组织形式: ⚫文本文件:ASCII文件,每个字节存放一个字符的ASCII码 ⚫二进制文件:数据按其在内存中的存储形式原样存放

★文件类型指针 指针变量说明:FLE*p ●D是一个指向FLE类型结构体的指针变量; ●从而通过该结构体变量中的文件信息能够访问该文件; 用法: ●文件打开时,系统自动建立文件结构体,并把指向它的指针 返回来,程序通过这个指针获得文件信息,访问文件 ●文件关闭后,它的文件结构体被释放

文件类型指针 ❖指针变量说明: FILE *fp; ⚫fp是一个指向FILE类型结构体的指针变量; ⚫从而fp通过该结构体变量中的文件信息能够访问该文件; ❖用法: ⚫文件打开时,系统自动建立文件结构体,并把指向它的指针 返回来,程序通过这个指针获得文件信息,访问文件 ⚫文件关闭后,它的文件结构体被释放

§9.3文件的打开与关闭 文件使用方式 含义 r/rb”(只读) 为输入打开一个文本/二进制文件 件 “w/wb”(只写) 为输出打开或建立一个文本/二进制文件 “a/ab”(追加) 向文本/二进制文件尾追加数据 “r+/b+”(读写) 为读/写打开一个文本/二进制文件 “w+/wb+”(读写) 为读/写建立一个文本/二进制文件 a+/ab+”(读写) 为读/写打开或建立一个文本/二进制文件 fp=fopen(char *name,char *mode) 》功能:按指定方式打开产丛 要打开的文件名 冬返值:正常打开,为指 二针打 开失败,为NULL

§9.3 文件的打开与关闭 C文件操作用库函数实现,包含在stdio.h 文件使用方式:打开文件->文件读/写->关闭文件 系统自动打开和关闭三个标准文件: ❖标准输入-键盘 stdin ❖标准输出-显示器 stdout ❖标准出错输出-显示器 stderr 打开文件fopen ❖函数调用: FILE *fp fp=fopen(char *name,char *mode) ❖功能:按指定方式打开文件 ❖返值:正常打开,为指向文件结构体的指针;打 开失败,为NULL 要打开的文件名 使用文件方式 例 文件打开与测试 FILE *fp; fp=fopen(“aa.c”,“w”); if(fp==NULL) { printf(“File open error!\n”); exit(0); } 例 FILE *fp; fp= fopen (“c:\\fengyi\\bkc\\test.dat”,”r”); 例 FILE *fp; char *filename=“c:\\fengyi\\bkc\\test.dat” fp= fopen(filename,”r”); “r+/rb+” (读写) “a/ab” (追加) “w/wb” (只写) “r/rb” (只读) “w+/wb+” (读写) “a+/ab+” (读写) 为输入打开一个文本/二进制文件 为输出打开或建立一个文本/二进制文件 为读/写打开一个文本/二进制文件 为读/写建立一个文本/二进制文件 为读/写打开或建立一个文本/二进制文件 向文本/二进制文件尾追加数据 文件使用方式 含义

★文件关闭fclose 必作用:使文件指针变量与文件“脱钩”,释放文件结构 体和文件指针 冬函数调用:fclose(fp) 功能:关闭文秒 f所指向的文件 必返值: 文件打开时返回的文件类型指针 缓冲文件系统: 不关闭文件可能会丢失数据 输入文件缓冲区 磁盘文件 程序数据区 a 输出文件缓冲区 fclose

文件关闭fclose ❖作用:使文件指针变量与文件“脱钩”,释放文件结构 体和文件指针 ❖函数调用: fclose(fp) ❖功能:关闭文件指针fp所指向的文件 ❖返值:正常关闭为 文件打开时返回的文件类型指针 0;出错时,非0 磁盘文件 输出文件缓冲区 输入文件缓冲区 程序数据区 a 缓冲文件系统: fclose 不关闭文件可能会丢失数据

§9.4文件的读写函数 ★字符I/O函数:fputc-与fgetc 冬fputc ●函数调用:fputc(ch,fp) ●功能:把一字节代码ch写入f指向的文件中 ●返值:正常,返回ch;出错,为EOF fgetc ●函数调用:ch=fgetc(fp) ●功能:从文件指针所指向的文件中读取一个字节代码 ●返值:正常,返回读到的代码值:读到文件尾或出错为EOF 文件I/0与终端I/0 #define putchar(c) fputc(c,stdout) #define getchar() fgetc(stdin)

§9.4 文件的读写函数 字符I/O函数: fputc与fgetc ❖fputc ⚫函数调用:fputc(ch, fp) ⚫功能:把一字节代码ch写入fp指向的文件中 ⚫返值:正常,返回ch;出错,为EOF ❖fgetc ⚫函数调用:ch=fgetc(fp) ⚫功能:从文件指针fp所指向的文件中读取一个字节代码 ⚫返值:正常,返回读到的代码值;读到文件尾或出错为EOF 文件I/O与终端I/O #define putchar( c ) fputc(c,stdout) #define getchar( ) fgetc(stdin)

例从键盘输入字符,逐个 .#include <stdio.h 存到磁盘文件中,直到main0 输入‘#“为止 FILE *in,*out; char ch,infile[10],outfile[10]; scanf("%s",infile); scanf("%s",outfile); 例读文本文件内容, if ((in=fopen(infile,"r"))==NULL) 并显示 printf("Cannot open infile.n"); exit(O); +例文件拷贝 if((out=fopen(outfile,"w"))==NULL) feof printf("Cannot open outfile.\n"); ●函数原型:lnt exit(O); ●功能:判断文件 ●返值:文件结 while (feof(in)) fputc(fgetc(in),out); fclose(in);fclose(out);

判断二进制文件是否结束 while(!feof(fp)) { c=fgetc(fp); . } 例 文件拷贝 例 从键盘输入字符,逐个 存到磁盘文件中,直到 输入‘#“为止 例 读文本文件内容, 并显示 #include main() { FILE *fp; char ch,*filename=“out.txt”; if((fp=fopen(filename,”r"))==NULL) { printf("cannot open file\n"); exit(0); } while((ch=fgetc(fp))!=EOF) putchar(ch); fclose(fp); } ❖feof ⚫函数原型:int feof(FILE *fp) ⚫功能:判断文件是否结束 ⚫返值:文件结束,返回真(非0);文件未结束,返回0 #include main() { FILE *fp; char ch,*filename=“out.txt”; if((fp=fopen(filename,"w"))==NULL) { printf("cannot open file\n"); exit(0); } printf("Please input string:"); ch=getchar(); while(ch!='#') { fputc(ch,fp); putchar(ch); ch=getchar(); } fclose(fp); } 将字符ch存入fp所指的文件中 将字符ch显示的屏幕上 获得一个字符存入ch 中 #include main() { FILE *in, *out; char ch,infile[10],outfile[10]; scanf("%s",infile); scanf("%s",outfile); if ((in = fopen(infile, "r"))== NULL) { printf("Cannot open infile.\n"); exit(0); } if ((out = fopen(outfile, "w"))== NULL) { printf("Cannot open outfile.\n"); exit(0); } while (!feof(in)) fputc(fgetc(in), out); fclose(in); fclose(out); }

★数据块I/0:fread与fwr ite 冬函数调用: fread(buffer,size,count,*fp) fwrite(buffer,size,count,*fp) 功能:读写数据块 返值:成功时返回读/写的块数;出错或到文件尾返回0 说明: ●buffer:指向要输入/输出数据块的首地址的指针 ●size:每个要读/写的数据块的大小(字节数) ●count:要读/写的数据块的个数 ●fp:要读/写的文件指针(对文件指fp所指的文件进行读写 操作)。 ●fread-与fwrite一般用于二进制文件的输入/输出

数据块I/O:fread与fwrite ❖函数调用: fread(buffer, size, count, *fp) fwrite(buffer, size, count, *fp) ❖功能:读/写数据块 ❖返值:成功时返回读/写的块数;出错或到文件尾返回0 ❖说明: ⚫buffer:指向要输入/输出数据块的首地址的指针 ⚫size:每个要读/写的数据块的大小(字节数) ⚫count:要读/写的数据块的个数 ⚫fp: 要读/写的文件指针(对文件指针fp所指的文件进行读写 操作)。 ⚫fread与fwrite 一般用于二进制文件的输入/输出

例 float f[2]; FILE *fp; fp=fopen(“aa.dat”,“rb); for(i=0;i<2;i++) fread(f,4,2,fp); fread(&f[i],4,1,fp); 例struct student int num; char name[20]; char sex; int age; float score[3]; }stud[10]; for(i=0;i<10;i++) fread(&stud[i],sizeof(struct student),1,fp);

例 float f[2]; FILE *fp; fp=fopen(“aa.dat”,“rb”); fread(f,4,2,fp); for(i=0;i<2;i++) fread(&f[i],4,1,fp); 例 struct student { int num; char name[20]; char sex; int age; float score[3]; }stud[10]; for(i=0;i<10;i++) fread(&stud[i],sizeof(struct student),1,fp);

例从键盘输入4个学生数据,把他们转存到磁盘文件中去 #include void display() #define SIZE 2 FILE *fp; struct student type int i, char name[10]; if((fp=fopen("d:\\fengyillexellstu_dat","rb"))==NULL) int num; printf("cannotopen file\n"); int age; return; char addr[15]; } }stud[SIZE]; for(i-0;i<SIZE;i++) mainO { fread(&stud[i],sizeof(struct student_type),1,fp); printf("-10s%4d %4d%-15sn",stud[i].name, int i; stud[i].num,stud[i].age,stud[i].addr); for(i=0;i<SIZE;++)} scanf"%s%d%d fclose(fp); save(); displayO);

例 从键盘输入4个学生数据,把他们转存到磁盘文件中去 #include #define SIZE 2 struct student_type { char name[10]; int num; int age; char addr[15]; }stud[SIZE]; main() { int i; for(i=0;i<SIZE;i++) scanf("%s%d%d%s",stud[i].name,&stud[i].num, &stud[i].age,stud[i].addr); save(); display(); } void save() { FILE *fp; int i; if((fp=fopen("d:\\fengyi\\exe\\stu_dat","wb"))==NULL) { printf("cannot open file\n"); return; } for(i=0;i<SIZE;i++) if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1) printf("file write error\n"); fclose(fp); } void display() { FILE *fp; int i; if((fp=fopen("d:\\fengyi\\exe\\stu_dat","rb"))==NULL) { printf("cannot open file\n"); return; } for(i=0;i<SIZE;i++) { fread(&stud[i],sizeof(struct student_type),1,fp); printf("%-10s %4d %4d %-15s\n",stud[i].name, stud[i].num,stud[i].age,stud[i].addr); } fclose(fp); }

共26页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档