新课件14.文件操作

上传人:E**** 文档编号:91015940 上传时间:2019-06-20 格式:PPT 页数:24 大小:217.50KB
返回 下载 相关 举报
新课件14.文件操作_第1页
第1页 / 共24页
新课件14.文件操作_第2页
第2页 / 共24页
新课件14.文件操作_第3页
第3页 / 共24页
新课件14.文件操作_第4页
第4页 / 共24页
新课件14.文件操作_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《新课件14.文件操作》由会员分享,可在线阅读,更多相关《新课件14.文件操作(24页珍藏版)》请在金锄头文库上搜索。

1、第十一章,文件操作,目标,了解文件访问基本概念 了解系统调用I/O与基于流的I/O 掌握文件访问的C库函数,本章结构,文件访问概念,文件操作,文件创建、打开、关闭、读写,基于流文件的I/O,文件的随机存取、格式输入输出,文件访问,每个文件拥有一个索引节点,而每个索引节点可以有一个或多个指向它的符号名,即文件的路径名 文件I/O操作有两种基本方式: (1)系统调用I/O 低一级的I/O,在处理设备、管道、网络套接字特殊类型的文件时候必须用 (2)基于流的I/O 建立在系统调用的I/O方法上的C函数库,基于系统调用方法的封装并增加了额外的功能,文件访问,系统调用I/O与基于流的I/O a:系统调用

2、直接处理文件描述符,而流函数则处理“FILE *” 类型的文件句柄 b:基于流的I/O有自动缓冲,支持格式化输出,fprintf函数 c: 基于流的I/O替用户处理有关系统调用的细节,比如系统调用被信号中断的处理等等 流I/O的使用:通过终端或文件交换信息 系统调用I/O的使用: 设备文件控制、网络或管道通信,基于流的I/O,文件句柄指向一个包含文件信息的结构体, 包括: 缓冲区的地址 缓冲区中当前字符的位置 文件的访问模式 # include FILE *fp;,基于流的I/O 打开、创建一个文件,FILE *fopen( const char *path,const char *mode)

3、 ;,模式,“ r ”,“ r+ ”,“ w ”,“ w+ ”,“ a ”,模式,“ a+ ”,模式说明,只读,读写,只写,读写,存在则清空,不存在创建新的,指针指向文件首,追加,存在指针指向尾,不存在创建新的,追加,存在清空,不存在创建新的,注: 加“b”表示打开的文件是二进制文件而不是纯文本文件,基于流的I/O 关闭一个文件,FILE *fclose( FILE *p) ;,Eg: #include int main(int argc, char *argv) FILE *fp; if(argc != 2) printf(“usage:fopenn“); return -1; ,基于流的I

4、/O关闭一个文件,Eg: fp = fopen(argv1, “w+“); if( fp = NULL ) perror(“asdffd fopen error“); else printf(“fopen %s successn“, argv1); if(fclose(fp) != 0 ) perror(“fclose error“); else printf(“fclose %s successn“, argv1); return 0; ,基于流的I/O 文件的随机存取,int fseek(FILE *stream, long offset,int whence ) ;,whence: SE

5、EK_SET 从文件头开始计算 SEEK_CUR 从文件当前位置开始计算 SEEK_END 从文件结尾开始计算,long ftell(FILE *stream ) ;,获取当前指针位置,基于流的I/O 按字符读文件,int fgetc(FILE *stream) ; int getc(FILE *stream);,Eg: #include int main(int argc, char *argv) char c; FILE *fp; if(argc != 2) printf(“usage:fopenn“); return -1; fp = fopen(argv1, “r“);,基于流的I/O

6、 按字符读文件,Eg: if(NULL = fp) printf(“fgetc:canot open %sn“,argv1); return -2; while(c=fgetc(fp)!= EOF) putchar(c); fclose(fp); return 0; ,基于流的I/O 按字符写文件,int fputc(char c, FILE *stream) ; int putc(char c, FILE *stream);,Eg: #include int main(int argc, char *argv) char c; FILE *fp_read, *fp_write; if(arg

7、c != 3) printf(“usage:fopenn“); return -1; ,基于流的I/O 按字符写文件,Eg: fp_read = fopen(argv1, “r“); if(NULL = fp_read) printf(“fgetc:canot open %sn“,argv1); return -2; fp_write = fopen(argv2, “w“); if(NULL = fp_write) printf(“fputc:canot open %sn“,argv1); fclose(fp_read); return -3; ,基于流的I/O 按字符写文件,Eg: whil

8、e(c=fgetc(fp_read)!= EOF) fputc(c, fp_write); fclose(fp_read); fclose(fp_write); return 0; ,基于流的I/O 字符串读写文件,char *fgets( char *s, int size,FILE *stream ) ; int fputs(const char *s, FILE *stream ) ;,Eg: #include int main(int argc, char *argv) char buf128; FILE *fp; if(argc != 2) printf(“usage:fopenn“

9、); return -1;,fgets返回值:成功返回字符串,错误或读到文件尾遇到EOF返回空指针,基于流的I/O字符串写读文件,Eg: fp = fopen(argv1, “r“); if(NULL = fp) printf(“fgetc:canot open %sn“,argv1); return -2; while(fgets(buf, sizeof(buf), fp)!= NULL) printf(“%s“, buf); fclose(fp); return 0; ,基于流的I/O 字符串读写文件,Eg: #include int main(int argc, char *argv)

10、char buf128; FILE *fp_read, *fp_write; if(argc != 3) printf(“usage:fopenn“); return -1; fp_read = fopen(argv1, “r“);,基于流的I/O 字符串读写文件,Eg: if(NULL = fp_read) printf(“fgetc:canot open %sn“,argv1); return -2; fp_write = fopen(argv2, “w“); if(NULL = fp_write) printf(“fputc:canot open %sn“,argv1); fclose(

11、fp_read); return -3; ,基于流的I/O 字符串读写文件,Eg: while(fgets(buf, sizeof(buf), fp_read)!= NULL) fputs(buf, fp_write); fclose(fp_read); fclose(fp_write); return 0; ,基于流的I/O 按字符读写文件,size_t fread(void *ptr, size_t size, size_t numb, FILE *stream) ; size_t fwrite(const void *ptr, size_t size, size_t numb, FILE

12、 *stream) ;,Eg: #include int main(int argc, char *argv) float fa10; int i; FILE *fp; fp = fopen(“test“, “w“); if(NULL = fp) perror(“fopen error“); return -3; ,基于流的I/O按字符读写文件,Eg: for(i=0;i10;i+) scanf(“%f“, ,基于流的I/O 文件的格式化输入输出,int fprintf(FILE *stream, const char *format, ) ; int fscanf(FILE *stream,

13、 const char *format, ) ;,Eg: #include int main(int argc, char *argv) int i; FILE *fp; char buf910=“company“,“address“,“project“,“zefi“,“shanghai“,“DC2000“,“PUHONG“,“SHENG“,“S3C2440“; fp = fopen(“tab.dat“, “w+“);,基于流的I/O 文件的格式化输入输出,Eg: if(NULL = fp) printf(“fprintf:canot open %sn“); return -2; for(i=0;i9;i+=3) fprintf(fp, “%10s%10s%10sn“,bufi,bufi+1, bufi+2); for(i=0;i9;i+=3) fscanf(fp, “%10s%10s%10sn”,bufi,bufi+1, bufi+2); printf(“%10s%10s%10sn”,bufi,bufi+1, bufi+2); fclose(fp); return 0; 思考? 想忽略第一行表头该怎么办?,

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

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号