资源预览内容
第1页 / 共41页
第2页 / 共41页
第3页 / 共41页
第4页 / 共41页
第5页 / 共41页
第6页 / 共41页
第7页 / 共41页
第8页 / 共41页
第9页 / 共41页
第10页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第12讲 文件内容提要 文件概述 标准文件操作C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页文件概述 文件是指存放在外存储器上的信息的集合 数据文件的存储形式 (1)文本文件(ASCII文件)按数据的ASCII形式存储(2)二进制文件按数据在内存中的二进制形式存储C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页标准文件与非标准文件利用缓冲区将对磁盘文件的频繁逐次访问变为批量访问的 做法称为标准文件操作程序数据区输出文件缓冲区输入文件缓冲区磁盘输出输入输出输入C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页文件的存取方式标准I/O提供了4种文件存取方法 (1)读写一个字符 (2)读写一个字符串,将多个字符组成的字符串写入文件或从文件中读出。 (3)格式化读写,根据格式控制指定的数据格式对数据进行转换存取。(4)成块读写,也称做按记录读写。 4种存取方式和C语言的对应的函数关系:C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页标准文件FILE结构指针 FILE类型保存被使用的文件的有关信息所有的文件操作都需要FILE类型的指针FILE是库文件中定义的结构体的别名注意不要写成struct FILE 举例FILE *fp;C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页FILE类型typedef struct short level; /*缓冲区满空程度*/unsigned flags; /*文件状态标志*/char fd; /*文件描述符*/unsigned char hold; /*无缓冲则不读取字符*/short bsize; /*缓冲区大小*/unsigned char *buffer; /*数据缓冲区*/unsigned char *curp; /*当前位置指针*/unsigned istemp; /*临时文件指示器*/short token; /*用于有效性检查*/ FILE;C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页文件的打开 (fopen函数) 函数原型FILE *fopen(char *filename, char *mode); 参数说明filename:要打开的文件路径mode :打开模式 返回值若成功,返回指向被打开文件的指针若出错,返回空指针NULL(0)C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页文件的打开模式文件操作方式含义义 r (只读读)为为只读读打开一个字符文件 w(只写)为为只写打开一个字符文件,文件指针针 指向文件首部 a(追加)打开字符文件,指向文件尾,在已存在 的文件中追加数据 rb(只读读)为为只读读打开一个二进进制文件 wb(只写)为为只写打开一个二进进制文件 ab(追加)打开二进进制文件,以向文件追加数据 r+(读读写)以读读写方式打开一个已存在的字符文件 w+(读读写)为读为读 写建立一个新的字符文件 a+(读读写)为读为读 写打开一个字符文件,进进行追加 rb+(读读写)为读为读 写打开一个二进进制文件 wb+(读读写)为读为读 写建立一个新的二进进制文件 ab+(读读写)为读为读 写打开一个二进进制文件进进行追加C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页文件的打开举例FILE *fp1, *fp2;/* 以文本只读方式打开file1 */if (!(fp1=fopen(“file1“, “r“) printf(“Cannot Open This File!n“);exit(0); /* 退出程序 */* 以二进制读写方式打开FILE2.TXT */fp2=fopen(“C:HOMEFILE2.TXT“, “rb+“);C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页文件的关闭 (fclose函数) 函数原型int fclose(FILE *fp); 参数说明fp:要关闭的文件指针 返回值若成功,返回0若出错,返回EOF(-1) 不用的文件应关闭,防止数据破坏丢失C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页文件的关闭举例FILE *fp;char file =“D:USERSTUDENTS.DAT“;if (!(fp=fopen(file, “rb+“) printf(“Open file %s error!n“, file);exit(0);. .fclose(fp);C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页读写操作(1) 读写文件中字符的函数 :从磁盘文件读取字符的函数是fgetc(),形式为:int fgetc (FILE *stream); 详细说明 将一个字符写入磁盘文件的函数是 fputc(),其形式为:int fputc (int ch,FILE *stream );详细说明 注:getc() 和 fgetc() 功能相同,putc() 和 fputc() 相同 应用举例C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页读写操作(2) 读写文件中字符串的函数 :从磁盘文件读取字符串的函数是fgets(),形式为:char * fgets (char * str ,int n ,FILE * stream) ; 详细说明 将一个字符串写入磁盘文件的函数是 fputs(),其形式为:char * fputs (char * str ,FILE * stream) ;详细说明 应用举例C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页读写操作(3) 格式化读写函数 函数原型int fscanf(FILE *fp, char *format,address,.);int fprintf(FILE *fp, char *format,argument,.);说明与printf和scanf函数类似从文件输入或输出到文件 应用举例C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页标准的随机读写(1) 文件指针定位函数文件位置指针位置指针指向当前读写的位置每次读写文件,位置指针都会相应移动可以通过相关函数强制修改位置指针相关函数 rewind函数 详细说明fseek函数 详细说明ftell函数 详细说明C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页标准的随机读写(2)文件随机读写函数:fwrite和freadsize_t fwrite(void *buffer,size_t size,size_t count,FILE *fp);size_t fread (void *buffer,size_t size,size_t count,FILE *fp);参数说明应用举例C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页fgetc/getc函数 函数原型int fgetc(FILE *fp);int getc(FILE *fp); 参数fp:文件指针 返回值若成功,返回输入的字符若失败或文件结束,返回EOFC语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页fputc/putc函数 函数原型int fputc(int c, FILE *fp);int putc(int c, FILE *fp); 参数c :要输出到文件的字符fp:文件指针 返回值若成功,返回输出的字符若失败或文件结束,返回EOFC语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页读写文件中字符的函数 void main()FILE *fp; /* 定义FILE结构指针变量 */char ch;if(fp = fopen (data1.txt , r ) = NULL )/* 打开并测试文件 */printf (file cannot be opened n );exit (1);/* 若文件打开不成功,退出 */ while (ch = fgetc (fp) != EOF)/*读文件并测试是否文件尾 */fputc (ch,stdout);/* 输出到标准设备文件(显示器)显示 */fclose (fp);/* 关闭文件 */ C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页fgets函数 函数原型char *fgets(char *s, int n, FILE *fp); 返回值若成功,返回s首地址;若失败,返回NULL 说明从fp输入字符串到s中输入n-1个字符,或遇到换行符或EOF为止读完后自动在字符串末尾添加0C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页fputs函数 函数原型int fputs(char *s, FILE *fp); 返回值若成功,返回输出字符个数(或最后的字符)若失败,返回EOF 说明字符串的结束标志0不会输出到文件也不会在字符串末尾自动添加换行符C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页读写文件中字符串的函数#include stdio.h void main() FILE *fp2 ;char buffer64 ;if (fp2=fopen (data2.txt,r) = NULL)/*以只读方式打开文件,且测试*/printf (cant open file n) ;exit (1) ;/* 打开不成功退出 */while (!feof (fp2)/* 测试文件是否结束 */if (fgets (buffer,64,fp2) != NULL)/*读一行字符并测试是否为空*/printf (%s ,buffer) ;/* 显示该行字符 */fclose (fp2) ;/* 关闭文件 */ C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页格式化读写函数 /* 2007-4 */ #include main() FILE *fp;int k,n,a6=1,2,3,4,5,6; fp=fopen(“d2.dat“,“w“); fprintf(fp,“%d%d%dn“,a0,a1,a2); fprintf(fp,“%d%d%dn“,a3,a4,a5); fclose(fp); fp=fopen(“d2.dat“,“r“); fscanf(fp,“%d%d“, printf(“%d%dn“,k,n); fclose(fp); 输出结果:123 456C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页rewind函数 函数原型void rewind(FILE *fp); 参数fp:文件指针 功能使文件位置指针重新返回文件开头C语言程序设计C语言程序设计C语言程序设计C语言程序设计上一页下一页fseek函数 (1)函数原型int fseek(FILE *fp, long offset, int whe
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号