文件的分类:
文本文件: 存储的是ASCII码的二进制 255 -> '2''5''5' -> 40 43 43 -> 101000 101000 101101
二进制文件: 存储的是数据的补码 255 -> 1111 1111
文件IO
FILE *fopen(const char *path,const char *made )
功能:打开或创建文件
path:文件路径
mode:打开模式
r 以只读权限打开文件,如果文件不存在则打开失败
r+ 在r的基础上增加写权限
w 以只写权限打开文件,如果文件不存在则创建文件,如果文件存在则清空原内容后写入新内容
w+ 在w的基础上增加读权限
a 以只写权限打开文件,如果文件不存在则创建文件,如果文件存在则在原内容后写入新内容
a+ 在a的基础上增加读权限
以上方式默认是以文本形式操作文件,在它们的基础上加b表示以二进制方式操作文件
返回值:结构指针,也称为文件指针,不需要关心它的成员,只需要知道它是操作文件的凭证,如果返回值是NULL表示文件操作失败
二进制方式读写文件:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件中读取数据到内存中
ptr:内存首地址
size:一次写入多少字节
nmemb:写入多少次
stream: 文件指针,一般是fopen的返回值
返回值:成功写入的次数
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:把内存中的数据写入到文件中
ptr:存储从文件中读取的数据内存首地址
size:一次读取的字节数
nmemb:读取多少次
stream:文件指针,一般是fopen的返回值
返回值:成功读取的次数
文本方式读写文件:
int fprintf(FILE *stream, const char *format, ...);
功能:以文本形式写入数据到文件中
stream:要写入的文件
format:占位符和提示信息
...:变量列表
返回值:成功写入的变量个数
int fscanf(FILE *stream, const char *format, ...);
功能:从文件中读取数据到变量中
stream: 要读取的文件
format:占位符
...:变量地址列表
返回值:成功读取的变量个数
int fclose(FILE *fp);
功能:关闭文件
文件的随机读写:
文件的位置指针:
每个打开的文件都有一个指针记录着操作的位置,它会随着读写函数的执行而移动。
以r、r+、w、w+模式打开文件,位置指针在文件的开头,以a、a+打开文件,位置指针在文件的末尾。
想要随机读写文件的任意位置的数据,只需要手动设置文件的位置指针即可。
int fseek(FILE *stream, long offset, int whence);
功能:设置文件的位置指针
stream: 文件指针
offset:偏移量
whence:偏移起点(三个宏)
SEEK_SET 文件开头
SEEK_CUR 当前位置
SEEK_END 文件末尾
返回值:成功返回0,失败返回-1
void rewind(FILE *stream);
功能:直接把位置指针设置到开头
long ftell(FILE *stream);
功能:获取文件位置指针的当前位置
返回值:当前位置指针在第几个字节
int feof(FILE *stream);
功能:检查文件位置指针是否达到末尾
返回值:返回 非0 说明到达文件末尾
char *fgets(char *s, int size, FILE *stream);
功能:从文件中读取一行字符串,长度为size-1
int fputs(const char *s,FILE *stream);
功能:写入一个字符串到文件中,自动在末尾添加\n
返回值:成功写入的字符个数
int remove(const char *pathname);
功能:删除文件
返回值:成功返回0,失败返回-1
int rename(const char *oldpath, const char *newpath);
功能:重命名文件
返回值:成功返回0,失败返回-1