C语言的文件读写
对于一个文件来说,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。
文件读写的三个步骤:
一:打开文件:
C语言中使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型FILE的一个对象,类型 FILE 包含了所有用来控制流的必要的信息。
函数原型如下:
FILE fopen( const char * filename, const char * mode );
其中filename是我们要打开的文件名称,可以使用绝对路径,也可以使用相对路径。
FILE 是一个FILE对象的指针,类型 FILE 包含了所有用来控制流的必要的信息。
mode 是一个字符串,表示打开文件的模式。有以下几种
r:打开一个已有的文本文件,允许读取文件。
w:打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件,程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a:打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。
r+:打开一个文本文件,允许读写文件。
w+:打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+:打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。
rb:打开一个已有的二进制文件,允许读取文件。
wb:打开一个二进制文件,允许写入文件。如果文件不存在,则会创建一个新文件,程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
ab:打开一个二进制文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。
rb+;打开一个二进制文件,允许读写文件。
wb+:打开一个二进制文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
ab+:打开一个二进制文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。
二:读写文件:
1、写文本文件方法:
int fputc( int c, FILE *fp );//将字符c(一个字节)写入文件
int fputs( const char *s, FILE *fp );//把字符串s写入到文件
int fprintf(FILE *fp,const char *format, …);//根据数据格式(format),将参数列表的数据写入文件
2、写二进制文件方法:
size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
ptr要写入文件的数据对象
size_of_elements 写入对象的长度,字符串使用strlen获取,结构体使用sizeof获取
number_of_elements 写入对象的个数,单个对象为1,数组为数组长度
a_file 写入的文件指针
3、读文本文件方法:
int fgetc( FILE * fp );//从文件流中一次读取一个字符,返回值是读取的字符
char *fgets( char *buf, int n, FILE *fp );//从文件流中读取n-1个字符,读取到buf缓冲区中。
int fscanf(FILE *fp, const char *format, …);//根据数据格式(format),从文件中读入数据,存储到参数列表中,遇到空格和换行时结束,若有多个参数,则读取下一个,否则结束读取
4、读二进制文件方法:
size_t fread(void *ptr, size_t size_of_elements,size_t number_of_elements, FILE *a_file);
ptr读取对象的指针
size_of_elements单个对象读取的长度
number_of_elements 读取对象的个数
a_file FILE指针
三:关闭文件:
使用完文件之后,为了防止内存泄漏,要 调用fclose( ) 函数关闭文件资源。
int fclose( FILE *fp );
如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回 EOF。这个函数实际上,会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。EOF 是一个定义在头文件 中的常量。