收藏 分享(赏)

第12章 文件操作.ppt

上传人:kpmy5893 文档编号:7183473 上传时间:2019-05-09 格式:PPT 页数:33 大小:1.14MB
下载 相关 举报
第12章 文件操作.ppt_第1页
第1页 / 共33页
第12章 文件操作.ppt_第2页
第2页 / 共33页
第12章 文件操作.ppt_第3页
第3页 / 共33页
第12章 文件操作.ppt_第4页
第4页 / 共33页
第12章 文件操作.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、第12章 文件操作,教学目标,声明结构体变量 访问结构体成员 掌握结构体作为函数参数的用法 了解自定义数据类型,教学目标,文件的定义 文件的打开fopen 文件的关闭fclose 文件的读写fscanf和fprintf,输入输出设备,输入设备 键盘、鼠标 软盘、硬盘(以文件的形式) 串行口、并行口、USB接口、网络端口 扫描仪、视频采集卡、电视卡、游戏杆、话筒 输出设备 显示器、打印机 软盘、硬盘(以文件的形式) 串行口、并行口、USB接口、网络端口 音箱 单纯的输入设备或者单纯的输出设备越来越少,标准输入输出,字符界面的操作系统一般都提供标准输入与输出设备 DOS、Linux、Unix 一般

2、情况,标准输入就是键盘,标准输出就是终端显示器 操作系统有能力重定向标准输入与输出,比如让文件作为标准输入(标准输出) 这种重定向程序本身是感觉不到的,自来水厂,流(Stream),水流 “子在川上曰:逝者如斯夫“ 计算机中的流的概念 一般称为数据流,也有叫做字节流、比特流的,还有很具体的文件流、视频流、音频流等 时光不能倒流,但计算机中的很多流都是会倒流的 如果你想重新读已经读过的数据,或者要修改已经写入的数据,可以发出流控(Flow Control)命令 不会倒流的数据流也很多,例如网络上的数据流。网络和数据线等介质只有很小的数据缓冲区,没有大量存储的能力,文件,计算机的内存容易健忘,所以

3、数据必须保存在硬盘、软盘、光盘和磁带等“不健忘“的外存上 这些能大量、永久保存信息的媒介,一般都以文件的形式给用户及应用程序使用 文件 一般指存储在外部介质上具有名字(文件名)的一组相关数据的集合 用文件可长期保存数据,并实现数据共享 程序中的文件在程序运行时由程序在磁盘上建立一个文件,并通过写操作将数据存入该文件; 或由程序打开磁盘上的某个已有文件,并通过读操作将文件中的数据读入内存供程序使用,使用数据文件的目的,数据文件的改动不引起程序的改动程序与数据分离 不同程序可以访问同一数据文件中的数据数据共享 能长期保存程序运行的中间数据或结果数据,文件的存放,可以建立若干目录(文件夹),在目录里

4、保存文件,同一级目录里保存的文件不能同名。对使用者而言,只要知道文件的路径(全目录)和文件名,就能使用该文件 C:exermain.c 这都是托OS的福,按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(键盘、显示器、打印机等) 按数据的组织形式: 文本文件: ASCII文件,每个字节存放一个字符的ASCII码 二进制文件:数据按其在内存中的存储形式原样存放,文件分类,文件格式,数据必须按照存入的类型读出,才能恢复其本来面貌 公开的标准格式 如bmp、t

5、if、gif、jpg和mp3等类型的文件 ,有大量软件能生成和使用这些类型的文件 也有不公开、甚至加密的文件格式 如Microsoft Word的doc格式就不公开,所以至今还没有Word以外的其它软件能完美地读出doc文件,文本文件特点: 存储量大、速度慢、便于对字符操作,二进制文件特点: 存储量小、速度快、便于存放中间结果,文件概述,缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区 非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区,文件处理方法,文件访问,基本模式 open:打开文件 获得对此文件的指针、引用和句柄等,以证明可以使用此文件 read:读文件

6、 参数一般指明要读多少字节,读到哪块内存。 每次调用此功能,都是接着上次调用的结束位置读(输入流) write:写文件 参数一般指明把哪块内存的内容写入文件,要写多少字节。 每次调用此功能,都是接着上次调用的结束位置写 (输出流) close:关闭文件 表明操作结束,不再使用此文件。 文件使用完毕必须关闭,否则影响系统性能 seek:文件定位 随机控制流的当前位置,缓冲文件系统为每个正使用的文件在内存开辟文件信息区 文件信息用系统定义的名为FILE的结构体描述 FILE定义在stdio.h中,typedef struct int _fd; /文件号int _cleft; /缓冲区中剩下的字符数

7、int _mode; /文件操作方式char *_next; /文件当前读写位置char *_buff; /文件缓冲区位置 FILE;,文件结构体,指针变量说明: FILE *fp; 用法: 文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件 文件关闭后,它的文件结构体被释放,文件类型指针,C文件操作用库函数实现,包含在stdio.h 文件使用方式:打开文件文件读/写关闭文件 系统自动打开和关闭三个标准文件: 标准输入-键盘 stdin 标准输出-显示器 stdout 标准出错输出-显示器 stderr 打开文件fopen 函数原型: FILE

8、*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:clanguagebkctest.dat“,“r“);,例 FILE *fp;char *filename=“c:clanguagebkctest.dat“fp= fopen(filename,“r

9、“);,文件的打开与关闭,文件关闭fclose 作用:使文件指针变量与文件“脱钩“,释放文件结构体和文件指针 函数原型:int fclose(FILE *fp),功能:关闭fp指向的文件 返值:正常关闭为0;出错时,非0,文件打开时返回的文件类型指针,不关闭文件可能会丢失数据,文件的打开与关闭,字符I/O:fputc与fgetc fputc 函数原型:int fputc(int c, FILE *fp) 功能:把一字节代码c写入fp指向的文件中 返值:正常,返回c;出错,为EOF,fgetc 函数原型:int fgetc(FILE *fp) 功能:从fp指向的文件中读取一字节代码 返值:正常,

10、返回读到的代码值;读到文件尾或出错,为EOF,文件的读写,#include #include int main() FILE *fp;char ch,*filename=“out.txt“;if(fp=fopen(filename,“w“)=NULL) printf(“cannot open filen“);exit(0);printf(“Please input string:“);,从键盘输入字符,逐个存到磁盘文件中,直到输入“#“为止,ch=getchar();while(ch!=#) fputc(ch,fp);putchar(ch);ch=getchar();fclose(fp);re

11、turn 0; ,文件的读写,#include #include int main() FILE *fp;char ch,*filename=“out.txt“;if(fp=fopen(filename,“r“)=NULL) printf(“cannot open filen“);exit(0);while(ch=fgetc(fp)!=EOF)putchar(ch);fclose(fp);return 0; ,判断文本文件是否结束,读文本文件内容,并输出到屏幕上,文件的读写,判断二进制文件是否结束while(!feof(fp) c=fgetc(fp);,判断文本文件是否结束,feof 函数原型

12、: int feof(FILE *fp) 功能:判断文件是否结束 返值:文件结束,返回真(非0);文件未结束,返回0,文件的读写,#include #include int main( ) FILE *in, *out;char ch,infile10,outfile10;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) p

13、rintf(“Cannot open outfile.n“);exit(0);while (!feof(in)fputc(fgetc(in), out);fclose(in); fclose(out);return 0; ,数据块I/O:fread与fwrite 函数原型:,size_t fread(void *buffer,size_t size, size_t count,FILE *fp) size_t fwrite(void *buffer,size_t size, size_t count,FILE *fp),功能:读/写数据块 返值:成功,返回读/写的块数;出错或文件尾,返回0 说

14、明: typedef unsigned size_t; buffer: 指向要输入/输出数据块的首地址的指针 size: 每个要读/写的数据块的大小(字节数) count: 要读/写的数据块的个数 fp: 要读/写的文件指针 fread与fwrite 一般用于二进制文件的输入/输出,文件的读写,char f2;FILE *fp;fp=fopen(“aa.txt“,“rb“);fread(f,1,2,fp);,for(i=0;i2;i+)fread(,文件的读写,函数原型:,int fprintf(FILE *fp,const char *format,argument,) int fscanf

15、(FILE *fp,const char *format,address,),功能:按格式对文件进行I/O操作 返值:成功,返回I/O的个数;出错或文件尾,返回EOF,例 fprintf(fp,“%d,%6.2f“,i,t); /将i和t按%d,%6.2f格式输出到fp文件fscanf(fp,“%d,%f“, /若文件中有3,4.5 ,则将3送入i, 4.5送入t,格式化输入输出,#include #include int main() char s80,c80;int a,b;FILE *fp;if(fp=fopen(“test“,“w“)=NULL) puts(“cant open fil

16、e“); exit(0) ; fscanf(stdin,“%s%d“,s, ,格式化输入输出,从键盘按格式输入数据存到磁盘文件中去,函数原型:,char *fgets(char *s,int n,FILE *fp)int fputs(char *s,FILE *fp),功能:从fp指向的文件读/写一个字符串 返值: fgets正常时返回读取字符串的首地址;出错或文件尾,返回NULL fputs正常时返回写入的最后一个字符;出错为EOF,fgets从fp所指文件读n-1个字符送入s指向的内存区, 并在最后加一个0(若读入n-1个字符前遇换行符 或文件尾(EOF)即结束),fputs把s指向的字符

17、串写入fp指向的文件,字符串输入输出,#include #include int main() FILE *fp; char string81;if(fp=fopen(“file.txt“,“w“)=NULL) printf(“cannt open file“); exit(0); while(strlen(gets(string)0) fputs(string,fp);fputs(“n“,fp); fclose(fp);if(fp=fopen(“file.txt“,“r“)=NULL) printf(“cannt open file“);exit(0); while(fgets(string

18、,81,fp)!=NULL)puts(string);fclose(fp);return 0; ,字符串输入输出,从键盘读入字符串存入文件,再从文件读回显示,概念 文件位置指针-指向当前读写位置的指针 读写方式 顺序读写:位置指针按字节位置顺序移动 随机读写:位置指针按需要移动到任意位置 rewind函数 函数原型: void rewind(FILE *fp) 功能:重置文件位置指针到文件开头 返值:无,文件的定位,#include int main() FILE *fp1,*fp2;fp1=fopen(“d:in.c“,“r“);fp2=fopen(“d:out.c“,“w“);while(!feof(fp1) putchar(getc(fp1);rewind(fp1);while(!feof(fp1) putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);return 0; ,文件的定位,对一个磁盘文件进行显示和复制两次操作,总结,文件的定义 文件的打开fopen 文件的关闭fclose 文件的读写fscanf和fprintf,Thank you,Question?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报