170 likes | 325 Views
第十讲 文件. 参考书 《C 程序设计 》 第十二章. 本讲主要内容. 文件的概念 文件结构体及文件指针 与文件操作有关的函数 综合举例. 文件的概念. 文件: 文件是磁盘上数据的集合。 C 语言的文件是流式文件。 文件结构体及文件指针 文件结构体是由系统定义的,在 stdio.h 中定义 : struct _iobuf { char _FAR_ *_ptr; int _cnt; char _FAR_ *_base; char _flag; char _file; };
E N D
第十讲 文件 参考书《C程序设计》第十二章
本讲主要内容 • 文件的概念 • 文件结构体及文件指针 • 与文件操作有关的函数 • 综合举例
文件的概念 • 文件: • 文件是磁盘上数据的集合。 C 语言的文件是流式文件。 • 文件结构体及文件指针 • 文件结构体是由系统定义的,在 stdio.h 中定义: struct _iobuf { char _FAR_ *_ptr; int _cnt; char _FAR_ *_base; char _flag; char _file; }; typedef struct _iobuf FILE; 其中集合了处理文件所需的各种有关信息:文件当前的读写位置、文件当前位置到文件尾之间的数据个数、该文件读写缓冲区位置、出错标志、该文件是已打开的第几个文件。 • 文件(结构体)指针: FILE *文件指针名
文件位置指针的定位 • 由文件打开方式确定: “r”“w”:指向文件头“a”:指向文件尾 • 库函数 void rewind(FILE *fp) 将文件的位置指针置于文件开头 • 库函数 fseek
fopen include: <stdio.h> 语法:FILE *fopen (文件名,“访问模式”); 参数: 文件名:字符串。(包括路径名) 访问模式: a:追加,若文件不存在,则创建新文件。 a+:同a,但可读。 r:读,若文件不存在,则失败。 r+:同r,但可写。 w:写,创建新文件,若已有同名文件存在则被破坏。 w+:同w,但可读。 t:文本方式。读入时,CR-LF转换为 LF,写时,LF转换为 CR-LF, CTRL+Z作为文件结束。文件以读或读、写方式打开时,去除CTRL+Z。 b:二进制方式,不做上述转换。
fclose include: <stdio.h> 语法:FILE *fclose(文件指针); 功能:关闭文件 返回:成功 0,否则 EOF(-1)
fputc,fputchar,putc,putchar 例 3 include: <stdio.h> 语法: 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)等同,二者都是函数。
fgetc,fgetchar,getc,getchar 例 1 include: <stdio.h> 语法: int fgetc(FILE *stream); int fgetchar(void); int getc(FILE *stream); int getchar(void); 参数: stream: 文件指针 返回:成功:所读字符;失败或读到文件尾:EOF 功能:从流式文件中读一个字符 注:getchar() 与 getc(stdin)等同,二者都是宏。fgetchar() 与 fgetc(stdin)等同,二者都是函数。 例 2
fread,fwrite include: <stdio.h> 语法: 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 的内存区域。
fprintf,fscanf 与 printf, scanf 类似, 但读/写对象是文件 看书:P280 例 4
putw include: <stdio.h> 语法: int putw(int binint,FILE *stream); 参数: binint: 要写入文件中的整数 stream: 文件指针 功能:以二进制形式,向文件中写一个 int 型的整数。 返回:成功:所写的整数值;失败:EOF。
getw include: <stdio.h> 语法: int getw(FILE *stream); 参数: stream: 文件指针 功能:从文件中读一个二进制 int 型的整数。 返回:成功:所读的整数值;失败:EOF。
fgets include: <stdio.h> 语法: char *fgets(字符数组首地址 string, 字节数 n, 文件指针); 功能:从文件中读入 n-1 字符,存入字符数组string中。 若不到 n-1 个字符时遇到换行或 EOF,则结束读操作。 返回:成功:地址 string; 失败时,或在未读满n-1个字符,且未遇到换行符时遇 EOF:返回0。 例 5
fputs include: <stdio.h> 语法: int fputs(字符串首地址 string,文件指针); 功能:将字符串写入文件中,自动舍弃末尾 '\0'。 返回:成功:非负值;失败:EOF。 例 6
fseek include: <stdio.h> 语法: int fseek(文件指针,位移量,起始点); 功能: 移动文件的读/写位置指针,从起始点开始,按位移量移动。 参数: 起始点: 文件开始:SEEK_SET 0 当前位置:SEEK_CUR 1 文件末尾:SEEK_END 2 位移量:从起始点偏移的字节数。
其它函数 include: <stdio.h> void rewind(文件指针); 功能:将位置指针置于文件开头。 返回值:无。 long ftell(文件指针); 功能:取得文件当前的读写位置。 返回值:成功:文件当前的读写位置; 失败:-1L。 int ferror(文件指针) 功能:测试文件的读写错误。 返回值:文件无错:0;文件有错:非 0。 void clearerr(文件指针) 功能:将错误标志、结束标志置 0。
作 业 • 复习: 《C 程序设计》第十二章 • P291 12.6,12.7,12.8,12.9 • P291 其它题选做。