清华大学 (9).ppt
上传人:sy****28 上传时间:2024-09-15 格式:PPT 页数:65 大小:209KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

清华大学 (9).ppt

清华大学(9).ppt

预览

免费试读已结束,剩余 55 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第10章文件操作本章主要内容10.1文件概述文件ASCII形式与二进制形式的比较FILE结构类型由系统定义,其格式各编译系统略有差别,大致如下:struct_iobuf{int_cnt;//输入缓冲区中等待取的字符个数int_fd;//文件号,或通道号int_flag;//I/O错误标志,有错则为非0char*_base;//指向I/O缓冲区的首地址char*_ptr;//指向当前所取的字符char*_fname;//指向文件识别名…}typedefstruct_iobufFILE;对于每一个要操作的文件,都必须定义一个指向结构文件的指针变量缓存的概念标准I/O的三种缓存10.2文件的基本操作FILE*fopen(constchar*filename,constcharmode);使用fopen()函数打开文件时,一般要检查文件打开的正确性,以便确定程序能否继续执行下去。例如:if(fp=fopen(”test”,”r”)==NULL){printf(”Thisfilecan’tbeopened!\n”);exit(1);}3文件的删除【例】tmpnam和tmpfile函数的使用#include<stdio.h>#include<stdlib.h>intmain(void){charname[20],line[20];//定义字符数组,用以存放文件名FILE*fp;printf("%s\n",tmpnam(name));//输出创建的第一个临时文件名tmpnam(name);//创建第二个临时文件printf("%s\n",name);//输出第二个临时文件名if((fp=tmpfile())==NULL)//判断是否创建了临时文件perror("createtempfilefailed!\n");fputs("hellotempfile!\n",fp);//将fp指针指向字符串,并移到尾部rewind(fp);//将fp指针指回到字符串的首地址if(fgets(line,sizeof(line),fp)==NULL)//将字符串存放在line数组中perror("fgetsfailed!");fputs(line,stdout);//将line数组中的内容输出到屏幕exit(0);}运行结果如下:Tmp1.$$$Tmp2.$$$hellotempfile!文件的读写包括非格式化读写和格式化读写,它们的用法不同,功能也不同(1)每次一个字符的读写intfgetc(FILE*stream);注意:由于是将usignedchar转换为int,因此正常字符的范围只能是0~255ANSIC中还定义了getc函数,该函数可能是由宏实现的,因此效率可能比较高。ANSIC中还定义了getchar函数,该函数相当于fgetc(stdin)。向流中写入一个字符:intfputc(intc,FILE*stream);这个函数实现的功能是将c输到stream流的当前位置注意:对应getc和getchar,ANSIC中定义了putc和putchar,功能同fputc。【例】编制程序,运行该程序后可以显示指定文件的内容。例如,假设编译后生成typefile.exe文件,则命令行的格式为:typefilefilename.txt<CR>其程序如下:#include"stdio.h"#include"stdlib.h"voidmain(intargc,char*argv[]){intch;FILE*fp;if((fp=fopen(argv[1],"r"))==NULL){printf("Thefile:%scan’tbeopened",argv[1]);exit(1);}ch=fgetc(fp);//读取字符while(ch!=EOF){putchar(ch);//逐个输出字符ch=fgetc(fp);//读取字符}printf("argcis%d",argc);fclose(fp);}(2)每次一行的读写char*fgets(char*buf,intn,FILE*stream)【例】基于行的I/O的使用。#include<stdio.h>#include<stdlib.h>voidmain(void){char*buf;intn=16;buf=(char*)malloc(n);//开辟存储空间while(fgets(buf,n,stdin)!=NULL){fputs(buf,stdout);puts(buf);