文件的概念
文件是计算机外部存储器上的存储单位,可以永久存储数据。每个文件有文件名、扩展名、创建时间、文件大小等基本信息。文件以字节文单位存储数据,文件的大小就是指文件所占字节数。
文件的分类
我们可以将文件简单分为文本文件和二进制文件。文本文件中存储的字节全部都是文字字符。二进制文件中的字节则可能出现0~255的任何取值。
C语言文件操作
C语言对文件进行操作需要用到打开,读取字节、写入字节、关闭等相关函数,必须要包含头文件stdio.h,同时还需要用到一个FILE类型,它是一个结构体,用于保存被访问文件的相关信息,它也在stdio.h中定义。
文件打开与关闭
打开文件
FILE * fopen("文件名","打开方式");
打开成功返回一个FILE型结构体变量地址,打开失败返回NULL(0)。第一个参数指定访问的文件名,可包含完整的路径。第二个参数指定文件的打开方式,含义如下图:
关闭文件
在程序中如果打开文件操作后不关闭文件,有可能会导致操作无效,数据丢失。
int fclose(FILE *fp);
关闭成功返回0,否则返回-1。
读取文件内容
读取一个字符
char fgetc(FILE *fp);
从文件当前位置读取一个字符返回,如果返回-1代表遇到文件末尾。
读取一串字符
char* fgets(char *str,int n,FILE *fp);
从文件中读取一串字符,长度为n。
按格式读取数据
int fscanf(FILE *fp,"格式字符串",输入列表);
按指定格式从文件中读取数据,格式串写法与scanf()函数一致。
读取一个数据块
fread(void *buffer,int size,int count,FILE *fp);
从文件中读取size*n个字节,存于buffer内存地址处。
向文件中写入数据
写入一个字符
int fputc(char ch,FILE *fp);
向文件中写入一个字符ch,成功返回0,失败返回-1。
写入一个字符串
int fputs(char *str,FILE *fp);
向文件中写入一个字符串str,成功返回0,失败返回-1。
按格式写入数据
int fprintf(FILE *fp,"格式字符串",输出列表);
按指定格式向文件中写入一批数据,格式串的写法与printf()函数一致
写入一个数据块
fwrite(void *buffer,int size,int count,fp);
将内存地址buffer处开始的size*count个字节写入文件中。
随机读写文件内容
对文件进行读写时,有一个变量记录了当前读写位置(读写点),对文件的读写都是从这个读写点开始的,文件刚打开时,读写点的值为0,随着读写操作进行,读写点会做出相应的移动,这是顺序地读写。如果想要在文件中任意位置进行读写,我们可以移动这个读写点。
改变文件读写位置
int fseek(FILE *fp,long offset,int origin);
将文件的读写点移动offset个字节,但是从哪个位置开始移动则有origin的值决定,它的取值可以是如下三个常量:
SEEK_SET,从文件头开始。
SEEK_CUR,从当前读写点位置开始。
SEEK_END,从文件尾开始,向前移动。
获得文件当前读写位置
long ftell(FILE *fp);
返回指定文件的当前读写点位置。
检查是否遇到文件尾
int feof(FILE *fp);
判断当前读写点是否遇到或超过文件尾,是返回1,否则返回0。
获得文件字节数
fseek(fp,0,SEEK_END);
n=ftell(fp);
得到的n就是文件总的字节数。