C语言程序设计 清华大学 郑莉 安颖莲
Page 1
第十讲 文件参考书,C程序设计,第十二章
C语言程序设计 清华大学 郑莉 安颖莲
Page 2
本讲主要内容
文件的概念
文件结构体及文件指针
与文件操作有关的函数
综合举例
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语言程序设计 清华大学 郑莉 安颖莲
Page 4
文件位置指针的定位
由文件打开方式确定:
,r”“w”:指向文件头
,a”:指向文件尾
库函数 void rewind( FILE *fp)
将文件的位置指针置于文件开头
库函数 fseek
C语言程序设计 清华大学 郑莉 安颖莲
Page 5
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:二进制方式,不做上述转换。
C语言程序设计 清华大学 郑莉 安颖莲
Page 6
fclose
include,<stdio.h>
语法,FILE *fclose(文件指针) ;
功能:关闭文件返回:成功 0,否则 EOF(-1)
C语言程序设计 清华大学 郑莉 安颖莲
Page 7
fputc,fputchar,putc,putchar
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) 等同,二者都是函数。
例 3
C语言程序设计 清华大学 郑莉 安颖莲
Page 13
fgetc,fgetchar,getc,getchar
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) 等同,二者都是函数。
例 1
例 2
C语言程序设计 清华大学 郑莉 安颖莲
Page 18
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 的内存区域。
C语言程序设计 清华大学 郑莉 安颖莲
Page 19
fprintf,fscanf
与 printf,scanf 类似,
但读 /写对象是文件看书,P280
例 4
C语言程序设计 清华大学 郑莉 安颖莲
Page 24
putw
include,<stdio.h>
语法:
int putw(int binint,FILE *stream);
参数:
binint,要写入文件中的整数
stream,文件指针功能:以二进制形式,向文件中写一个 int 型的整数。
返回:成功,所写的整数值 ;失败,EOF。
C语言程序设计 清华大学 郑莉 安颖莲
Page 25
getw
include,<stdio.h>
语法:
int getw(FILE *stream);
参数:
stream,文件指针功能:从文件中读一个二进制 int 型的整数。
返回:成功,所读的整数值 ;失败,EOF。
C语言程序设计 清华大学 郑莉 安颖莲
Page 26
fgets
include,<stdio.h>
语法:
char *fgets(字符数组首地址 string,
字节数 n,文件指针 );
功能:从文件中读入 n-1 字符,存入字符数组 string中。
若不到 n-1 个字符时遇到换行或 EOF,则结束读操作。
返回:成功:地址 string;
失败时,或在未读满 n-1个字符,且未遇到换行符时遇 EOF:
返回 0。
例 5
C语言程序设计 清华大学 郑莉 安颖莲
Page 31
fputs
include,<stdio.h>
语法:
int fputs(字符串首地址 string,文件指针 );
功能:将字符串写入文件中,自动舍弃末尾 '\0'。
返回:成功,非负值 ;失败,EOF。
例 6
C语言程序设计 清华大学 郑莉 安颖莲
Page 35
fseek
include,<stdio.h>
语法:
int fseek(文件指针,位移量,起始点 );
功能:
移动文件的 读 /写位置指针,从 起始点 开始,按 位移量移动。
参数:
起始点:
文件开始,SEEK_SET 0
当前位置,SEEK_CUR 1
文件末尾,SEEK_END 2
位移量:从 起始点 偏移的字节数。
C语言程序设计 清华大学 郑莉 安颖莲
Page 36
其它函数
include,<stdio.h>
void rewind(文件指针 );
功能:将位置指针置于文件开头。
返回值:无。
long ftell(文件指针 );
功能:取得文件当前的读写位置。
返回值:成功:文件当前的读写位置;
失败,-1L。
int ferror(文件指针 )
功能:测试文件的读写错误。
返回值:文件无错,0;文件有错:非 0。
void clearerr(文件指针 )
功能:将错误标志、结束标志置 0。
C语言程序设计 清华大学 郑莉 安颖莲
Page 37
作 业
复习:
,C 程序设计,第十二章
P291 12.6,12.7,12.8,12.9
P291 其它题选做。
Page 1
第十讲 文件参考书,C程序设计,第十二章
C语言程序设计 清华大学 郑莉 安颖莲
Page 2
本讲主要内容
文件的概念
文件结构体及文件指针
与文件操作有关的函数
综合举例
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语言程序设计 清华大学 郑莉 安颖莲
Page 4
文件位置指针的定位
由文件打开方式确定:
,r”“w”:指向文件头
,a”:指向文件尾
库函数 void rewind( FILE *fp)
将文件的位置指针置于文件开头
库函数 fseek
C语言程序设计 清华大学 郑莉 安颖莲
Page 5
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:二进制方式,不做上述转换。
C语言程序设计 清华大学 郑莉 安颖莲
Page 6
fclose
include,<stdio.h>
语法,FILE *fclose(文件指针) ;
功能:关闭文件返回:成功 0,否则 EOF(-1)
C语言程序设计 清华大学 郑莉 安颖莲
Page 7
fputc,fputchar,putc,putchar
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) 等同,二者都是函数。
例 3
C语言程序设计 清华大学 郑莉 安颖莲
Page 13
fgetc,fgetchar,getc,getchar
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) 等同,二者都是函数。
例 1
例 2
C语言程序设计 清华大学 郑莉 安颖莲
Page 18
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 的内存区域。
C语言程序设计 清华大学 郑莉 安颖莲
Page 19
fprintf,fscanf
与 printf,scanf 类似,
但读 /写对象是文件看书,P280
例 4
C语言程序设计 清华大学 郑莉 安颖莲
Page 24
putw
include,<stdio.h>
语法:
int putw(int binint,FILE *stream);
参数:
binint,要写入文件中的整数
stream,文件指针功能:以二进制形式,向文件中写一个 int 型的整数。
返回:成功,所写的整数值 ;失败,EOF。
C语言程序设计 清华大学 郑莉 安颖莲
Page 25
getw
include,<stdio.h>
语法:
int getw(FILE *stream);
参数:
stream,文件指针功能:从文件中读一个二进制 int 型的整数。
返回:成功,所读的整数值 ;失败,EOF。
C语言程序设计 清华大学 郑莉 安颖莲
Page 26
fgets
include,<stdio.h>
语法:
char *fgets(字符数组首地址 string,
字节数 n,文件指针 );
功能:从文件中读入 n-1 字符,存入字符数组 string中。
若不到 n-1 个字符时遇到换行或 EOF,则结束读操作。
返回:成功:地址 string;
失败时,或在未读满 n-1个字符,且未遇到换行符时遇 EOF:
返回 0。
例 5
C语言程序设计 清华大学 郑莉 安颖莲
Page 31
fputs
include,<stdio.h>
语法:
int fputs(字符串首地址 string,文件指针 );
功能:将字符串写入文件中,自动舍弃末尾 '\0'。
返回:成功,非负值 ;失败,EOF。
例 6
C语言程序设计 清华大学 郑莉 安颖莲
Page 35
fseek
include,<stdio.h>
语法:
int fseek(文件指针,位移量,起始点 );
功能:
移动文件的 读 /写位置指针,从 起始点 开始,按 位移量移动。
参数:
起始点:
文件开始,SEEK_SET 0
当前位置,SEEK_CUR 1
文件末尾,SEEK_END 2
位移量:从 起始点 偏移的字节数。
C语言程序设计 清华大学 郑莉 安颖莲
Page 36
其它函数
include,<stdio.h>
void rewind(文件指针 );
功能:将位置指针置于文件开头。
返回值:无。
long ftell(文件指针 );
功能:取得文件当前的读写位置。
返回值:成功:文件当前的读写位置;
失败,-1L。
int ferror(文件指针 )
功能:测试文件的读写错误。
返回值:文件无错,0;文件有错:非 0。
void clearerr(文件指针 )
功能:将错误标志、结束标志置 0。
C语言程序设计 清华大学 郑莉 安颖莲
Page 37
作 业
复习:
,C 程序设计,第十二章
P291 12.6,12.7,12.8,12.9
P291 其它题选做。