C语言程序设计 清华大学郑莉安颖莲 第十讲文件 参考书《C程序设计》第十二章
C语言程序设计 清华大学 郑莉 安颖莲 Page 1 第十讲 文件 参考书《C程序设计》第十二章
C语言程序设计 清华大学郑莉安颖莲 本讲主要内容 文件的概念 文件结枘体及文件指钋 与文件操作有关的亟数 综合举例
C语言程序设计 清华大学 郑莉 安颖莲 Page 2 本讲主要内容 • 文件的概念 • 文件结构体及文件指针 • 与文件操作有关的函数 • 综合举例
C语言程序设计 清华大学郑莉安颖莲 文件的概念 文件: 文件是磁盘上数据的集合。C语言的文件是流式文件 文件结构体及文件指针 文件结构体是由系统定义的,在 stdio.h中定义 struct iobuf i char FAR ptr int cnt char FAR k base char flag: char file: I typedef struct iobuf FIle 其中集合了处理文件所需的各种有关信息:文件当前的读写位置 文件当前位置到文件尾之间的数据个数、该文件读写缓冲区位置 出错标志、该文件是已打开的第几个文件。 文件(结构体)指针:FILE米文件指针名Page3
C语言程序设计 清华大学 郑莉 安颖莲 Page 3 文件的概念 • 文件: - 文件是磁盘上数据的集合。 C 语言的文件是流式文件。 • 文件结构体及文件指针 - 文件结构体是由系统定义的,在 stdio.h 中定义: struct _iobuf { char _FAR_ *_ptr; int _cnt; char _FAR_ *_base; char _flag; char _file; }; typedef struct _iobuf FILE; 其中集合了处理文件所需的各种有关信息:文件当前的读写位置、 文件当前位置到文件尾之间的数据个数、该文件读写缓冲区位置、 出错标志、该文件是已打开的第几个文件。 - 文件(结构体)指针: FILE *文件指针名
C语言程序设计 清华大学郑莉安颖莲 文件位量指针的定 由文件打开方式确定: r”“w”:指向文件头 “a”:指向文件尾 库函数 void rewind(FIE*fp) 将文件的位置指针置于文件开头 库函数 fseek
C语言程序设计 清华大学 郑莉 安颖莲 Page 4 文件位置指针的定位 • 由文件打开方式确定: “r”“w”:指向文件头 “a”:指向文件尾 • 库函数 void rewind(FILE *fp) 将文件的位置指针置于文件开头 • 库函数 fseek
C语言程序设计 清华大学郑莉安颖莲 fopen include: 语法:FILE* fopen(文件名,“访问模式”); 参数: 文件名:字符串。(包括路径名) 访问模式: a:追加,若文件不存在,则创建新文件。 a+:同a,但可读。 r:读,若文件不存在,则失败 r+:同r,但可写。 W:写,创建新文件,若已有同名文件存在则被破坏。 W+:同w,但可读 t:文本方式。读入时,CR-LF转换为LF,写时,LF转换为 CRLF,CTRL+Z作为文件结束。文件以读或读、写方式打开时, 去除CTRL+Z。 b:二进制方式,不做上述转换
C语言程序设计 清华大学 郑莉 安颖莲 Page 5 fopen include: 语法:FILE *fopen (文件名,“访问模式”); 参数: 文件名:字符串。(包括路径名) 访问模式: a:追加,若文件不存在,则创建新文件。 a+:同a,但可读。 r:读,若文件不存在,则失败。 r+:同r,但可写。 w:写,创建新文件,若已有同名文件存在则被破坏。 w+:同w,但可读。 t:文本方式。读入时,CR-LF 转换为 LF,写时,LF 转换为 CR-LF, CTRL+Z 作为文件结束。文件以读或读、写方式打开时, 去除CTRL+Z。 b:二进制方式,不做上述转换
C语言程序设计 清华大学郑莉安颖莲 fclose include: 语法:FILE* fclose(文件指针) 功能:关闭文件 返回:成功0,否则EOF(-1)
C语言程序设计 清华大学 郑莉 安颖莲 Page 6 fclose include: 语法:FILE *fclose(文件指针); 功能:关闭文件 返回:成功 0,否则 EOF(-1)
C语言程序设计 清华大学郑莉安颖莲 fputc, fputchar, putc, putchar include: 例3 语法 int fputc(int c, FILE *stream) int fputchar(int c) int putc(int c, FILE *stream) int putchar(int c) 参数: 被写的字符 stream:文件指针。 返回:成功:所写字符;失败:EOF。 功能:将一个字符写到文件中 注 putcha ar(c)与putc(c, stdout)等同,二者都是宏。 fputchar(c)与 fputc(c, stdout)等同,二者都是函数。 Page 7
C语言程序设计 清华大学 郑莉 安颖莲 Page 7 fputc,fputchar,putc,putchar include: 语法: int fputc(int c,FILE *stream); int fputchar(int c); int putc(int c,FILE *stream); int putchar(int c); 参数: c: 被写的字符。 stream: 文件指针。 返回:成功:所写字符;失败:EOF。 功能:将一个字符写到文件中。 注:putchar(c) 与 putc(c,stdout) 等同,二者都是宏。 fputchar(c) 与 fputc(c,stdout) 等同,二者都是函数。 例 3
C语言程序设计 清华大学郑莉安颖莲 fgetc, fgetchar, getc, getchar include:< stdio.h〉 语法: 例 int fgetc(FILE *stream int fgetchar(void) int getc(FIle *stream) 例2 int getchar(void) 参数: stream:文件指针 返回:成功:所读字符;失败或读到文件尾:EOF 功能:从流式文件中读一个字符 注: getchar(与getc( stdin)等同,二者都是宏 fgetchar(与 fgetc( stdin)等同,二者都是函数
C语言程序设计 清华大学 郑莉 安颖莲 Page 13 fgetc,fgetchar,getc,getchar include: 语法: int fgetc(FILE *stream); int fgetchar(void); int getc(FILE *stream); int getchar(void); 参数: stream: 文件指针 返回:成功:所读字符;失败或读到文件尾:EOF 功能:从流式文件中读一个字符 注:getchar() 与 getc(stdin) 等同,二者都是宏。 fgetchar() 与 fgetc(stdin) 等同,二者都是函数。 例 1 例 2
C语言程序设计 清华大学郑莉安颖莲 fread fwrite include: 语法: size t fread(void* buffer, size t size, size t count, FILE *stream size t fwrite( void *buffer, size t size size t count, FILE *stream 参数: buffer:读/写数据的存放首地址 size:每次要/写读的字节数 count:读/写次数 stream:文件指针 返回:实际读/写的次数。 功能:从文件中连续读入 count次,字节数为size的数据块, 存放在起始地址为 buffer的内存区域
C语言程序设计 清华大学 郑莉 安颖莲 Page 18 fread,fwrite include: 语法: size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); size_t fwrite( void *buffer, size_t size, size_t count, FILE *stream ); 参数: buffer: 读/写数据的存放首地址 size: 每次要/写读的字节数 count: 读/写次数 stream: 文件指针 返回:实际读/写的次数。 功能:从文件中连续读入 count 次,字节数为 size 的数据块, 存放在起始地址为 buffer 的内存区域
C语言程序设计 清华大学郑莉安颖莲 fprintf, fscanf 与 printf, scanf类似 但读/写对象是文件 看书:P280 例4
C语言程序设计 清华大学 郑莉 安颖莲 Page 19 fprintf,fscanf 与 printf, scanf 类似, 但读/写对象是文件 看书:P280 例 4