文件IO
FILE* fopen(const char* path, const char* mode);
文件的分类:
文本文件:存储人能看懂的文件,存储的是ASCII码的二进制'2''5''5' '2'-> 50 的二进制
二进制文件:存储的是数据的二进制 255
功能:打开或者创建文件
path:文件路径
mode:打开模式
r: 以只读权限打开文件,如果不存在则失败
r+: 在r的基础上增加写权限
w: 以只写权限打开文件,如果不存在则创建文件,如果文件已存在则清空打开
w+: 在w的基础上增加读权限
a: 以只写权限打开文件,如果文件不存在则新建,如果文件已存在则在文件末尾追加写入
a+: 增加读权限,读取是在文件的开头,但输出是始终附加到文件的末尾
注意:以上六种模式都是以文本文件模式 *** 作文件,在他们的基础上后面加b表示以二进制方式 *** 作文件
返回值:结构指针,不需要关心他的成语
二进制方式读写:
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的返回值
返回值:成功写入的字节数
perror(“(函数名)”);打印出跟 *** 作系统相关的错误
练习2:定义一个教师结构体变量并初始化,把该变量的值以二进制方式写入文件中
练习2:从文件中读取教师变量并显示
#include
typedef struct Teacher
{
char name[20];
char sex;
int id;
int age;
}Teacher;
int main(int argc, const char* argv[])
{
Teacher tch = { "xm",'m',1234,30 };
FILE* fwp = fopen("teacher.txt", "w");
if (NULL == fwp)
{
perror("fopen");
//printf("空指针!");
return 1;
}
fwrite(&tch, 1, sizeof(tch), fwp);
}
#include
typedef struct Teacher
{
char name[20];
char sex;
int id;
int age;
}Teacher;
int main(int argc, const char* argv[])
{
Teacher tch;
FILE* frp = fopen("teacher1.txt", "r");
if (NULL == frp)
{
perror("fopen");
return -1;
}
fread(&tch, sizeof(Teacher), 1, frp);
printf(" %s %c %d %dn", tch.name, tch.sex, tch.id, tch.age);
}
文本方式读写:
int fprintf(FILE* stream, const char* format,...);
功能:以文本形式写入数据到文件中;
stream:要写入的文件,文件指针
format:“提示信息+占位符”
... :变量名列表
返回值:成功写入的字符个数
int fscanf(FILE* stream, const char* format, ...);
功能:从文件中读取数据到变量里
stream : 要读取的文件,文件指针
format : “提示信息 + 占位符”
... : 变量地址列表
返回值:成功读取到的变量个数
练习3:定义一个教师结构体变量并初始化,把该变量的值以文本方式写入文件中
练习4:从文件中以文本形式读取教师变量并显示
int fclose(FILE *stream)
功能:关闭文件
文件的随机读写:
文件的位置指针:
每个打开的文件都有一个指针记录着读写 *** 作的位置,而且它会随着读写函数的执行而发生移动
以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
long ftell(FILE* stream);
功能:获取当前文件位置指针的位置
返回值:位置指针在第几个字节
void rewind(FILE* stream);
功能:把文件位置指针设置到开头
文件相关函数
char* fgets(char* s, int size, FILE* stream);
功能:从文件中读取一行字符串,到结束
返回值:链式调用
int fgetc(FILE * stream);
功能:从文件中读取一个字符
int fputs(const char* s, FILE * stream);
功能:写入一个字符串到文件中
int fputc(int c, FILE* stream);
功能:写入一个字符到文件中
int rename(const char* oldpath, const char* newpath);
功能:重命名文件
返回值:成功返回0,失败返回-1
int remove(const char* pathname);
功能:删除文件
返回值:成功返回0,失败返回-1
main的参数:
是为了获取运行时命令行附加的参数
argc代表附加的参数的个数,包括./可执行文件名,也算参数
argv代表每个命令行参数的字符串首地址
练习5:
实现一个cp命令的功能,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)