C语言程序设计 清华大学郑莉安颖莲 第十讲」 文件 参考书《C程序设计》第十二章 Page 1
C语言程序设计 清华大学 郑莉 安颖莲 Page 1 第十讲 文件 参考书《C程序设计》第十二章
C语言程序设计 清华大学郑莉安颖莲 本讲主要内容 。文件的概念 ·文件结构体及文件指针 ·与文件操作有关的函数 ·综合举例 Page 2
C语言程序设计 清华大学 郑莉 安颖莲 Page 2 本讲主要内容 • 文件的概念 • 文件结构体及文件指针 • 与文件操作有关的函数 • 综合举例
C语言程序设计 清华大学郑莉安颖莲 文件的概念 文件: -文件是磁盘上数据的集合。C语言的文件是流式文件。 ·文件结构体及文件指针 -文件结构体是由系统定义的,在stdio.h中定义: struct iobuf char FAR ptr; int _cnt; char FAR base; char _flag; char file;} typedef struct iobuf FILE; 其中集合了处理文件所需的各种有关信息:文件当前的读写位置、 文件当前位置到文件尾之间的数据个数、该文件读写缓冲区位置、 出错标志、该文件是已打开的第几个文件。 -文件(结构体)指针: FILE*文件指针名 Page 3
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 (FILE *fp) 将文件的位置指针置于文件开头 ·库函数fseek Page 4
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转换为 CR-LF,CTRL+Z作为文件结束。文件以读或读、写方式打开时, 去除CTRL+Z。 b:二进制方式,不做上述转换。 Page 5
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,否则E0F(-1) Page 6
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); 参数: c:被写的字符。 stream:文件指针。 返回:成功:所写字符;失败:EOF。 功能:将一个字符写到文件中。 注:putchar(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: 语法: 例1 int fgetc(FILE *stream); int fgetchar (void); int getc (FILE *stream); 例2 int getchar(void); 参数: stream:文件指针 返回:成功:所读字符;失败或读到文件尾:EOF 功能:从流式文件中读一个字符 注:getchar()与getc(stdin)等同,二者都是宏。 fgetchar()与fgetc(stdin)等同,二者都是函数。 Page 13
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 1) size t fwrite(void *buffer,size_t size, size_t count,FILE *stream ) 参数: buffer:读/写数据的存放首地址 size:每次要/写读的字节数 count:读/写次数 stream:文件指针 返回:实际读/写的次数。 功能:从文件中连续读入count次,字节数为size的数据块, 存放在起始地址为buffer的内存区域。 Page 18
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 Page 19
C语言程序设计 清华大学 郑莉 安颖莲 Page 19 fprintf,fscanf 与 printf, scanf 类似, 但读/写对象是文件 看书:P280 例 4