1、文件指针:
文件结构体
typedef struct iobuf{
int cnt; /*剩余的字节数*/
char *ptr; /*下一个字符的位置*/
char *base; /*缓冲区的位置*/
int flag; /*文件访问模式*/
int fd; /*文件描述符*/
}FILE; /* This is the FILE object */
2、文件的打开、读写、关闭
1\打开文件:FILE *fopen(char *filename, char *mode)
先建立文件读写缓冲区
功能:按指定方式打开文件
返回值:正常返回指向文件结构体的指针,失败返回NULL
打开文件的方式字符*mode 含 义
r 打开一个已存在的文件,准备从文件中读取数据。不能向文件写数据
w 创建一个新文件,准备向文件写入数据。不能从文件中读取数据。如果文件已经存在,这个文件将被覆盖,破坏之前的文件内容,用于文件复制
a 打开一个已存在的文件,准备在文件尾部追加数据。不能从文件中读取数据。如果文件不存在,则创建这个文件准备写入数据
r+ 打开一个已存在的文件,准备读写。既可以读取数据,也可以写入数据,读的时候不会清空,写的时候清空文件
w+ 创建一个新文件,准备读写。如果文件已经存在,则覆盖原文件,打开时就清空文件
a+ 等价于a,但可从文件中读取数据
t 打开一个文本文件
b 打开一个二进制文件
打开文件方式字符串mode其字符先后次序是:操作类型符在前,打开文件类型符在后
2\文件关闭
int *fclose(FILE *filepointer)
关闭filepointer指向的文件;正常关闭为0,否则非0
调用fclose后数据从缓冲区写道文件内
3\文件的读写
char fgetc (FILE *filepointer)
从filepointer指向的文件中,读入一个字符,同时将读写位置指针指向下一个字符;正常返回读到的代码值,读到文件尾或者出错返回EOF
char fputc (char c, FILE *filepointer)
将字符数据c输出到filepointer指向的文件中,同时将位置指针指向下一个字节;正常返回c,出错返回EOF
缓冲区满了或者调用fclose函数后,数据将放到真正文件内
int feof ( FILE *filepointer );
判断文件是否结束;文件结束返回非0,未结束返回0
char fgets(char* s, int n, FILE *filepointer)
从filepointer所指向的文件读取n个字节长度的字符串,到s;正常返回读取的字符串的指针s,出错或文件尾,返回NULL
s读满了或者文件尾时返回
char fputs(char *s, FILE *filepointer)
将放在s中的字符串写到文件指针filepointer所指向的文件中,将读写位置指针向钱移动字符串长度个字节;正常返回最后一个字符,出错返回EOF,文件尾时返回NULL
到'\0'时写完
4\数据快的读写函数
unsigned fread(void *ptr, unsigned size, unsigned n, FILE *filepointer)
从filepointer所指向的文件中读取n个数据项,每个数据项的大小是size个字节,数据被放到ptr所指向的内存中,并将位置指针向前移动n*size个字节;成功返回数据项的个数(而非字节数),出错或末尾返回0
读取字符文件时要省去一行,给‘\0’
unsigned fwrite(void *ptr, unsigned size, unsigned n, FILE *filepointer)
将ptr所指向的内存中存放的n个大小为size个字节的数据项写入到filepointer指向的文件中,实际写入的数据是n*size个字节,并将读写位置指针向前移动n*size个字节;成功返回实际写入的数据项的个数,反之返回0
5\格式化读写函数,,输出流
int fscanf(FILE *filepointer, comst char *format[, address,...] )
从filepointer所指向的文件中读取数据;成功返回读取数据项的个数,反之返回EOF
Int fprintf(FILE *filepointer, const char *format[address,.....])
将表达式输出到filepointer所指向的文件中;成功返回写入的字节书,反之返回EOF
读/写1个字符(或字节)数据时:选用fgetc( )和fputc( )函数。
读/写1个字符串时:选用fgets( )和fputs( )函数。
读/写1个(或多个)不含格式的数据时:选用fread( )和fwrite( )函数。
读/写1个(或多个)含格式的数据时:选用fscanf( )和fprintf( )函数
fgetc( )和fputc( )函数主要对文本文件进行读写,但也可对二进制文件进行读写;
fgets( )和fputs( )函数主要对文本文件进行读写,对二进制文件操作无意义;
fread( )和fwrite( )函数主要对二进制文件进行读写,但也可对文本文件进行读写;
fscanf( )和fprintf( )函数主要对二进制文件进行读写,对文本文件操作无意义。
3、文件的定位读写
void rewind(FILE *filepointer)
将filepointer所指向的文件的位置指针重新置回到文件开头
int fseek(FILE *filepointer, long offset, int whences)
改变文件位置指针的指向,文件指针,位移量(起点为基准, >0后移, <0 前移),起始点(文件开始 SEEK_SET 0;文件当前位置 SEEK_CUR 1;文件末尾 SEEK_END 2);成功返回0,失败返回非0
跳过多少字节书时
fseek(file, 0, SEEK_END):直接到末尾
long ftell(FILE *filepointer)
返回位置指针当前位置(用相对文件开头的位移量表示);成功返回当前位置指针位置,失败返回-1L
A\fseek(file, 0, SEEK_END)
ftell(file)
B\ ftell(file)
Strcasecmp : buqufendaxiaoxie
Fputc and fgetc are used to make the error: