fopen函数声明
FILE * fopen(const char *path,const char *mode)
打开一个已经存在的文件,并返回这个文件的文件指针,或者创建一个文件,然后打开这个文件,并返回这个文件的文件指针
path :文件的路径,可以是相对路径。也可以是绝对路径
mode:打开模式,r、w、a、+等
r 只读:如果文件不存在返回NULL,存在则返回文件指针
w只写:如果文件不存在,则以指定文件名创建此文件,并打开文件;如果文件存在,则清空文件内容,再打开文件,返回指针,如果文件无法打开,则返回NULL
a追加:如果文件不存在,则以指定文件名创建此文件,并打开文件;如果文件存在,则在文件结尾处追加内容
+:同时以读写的方式打开文件
fclose函数声明
int fclose (FILE*fp)
关闭fp所代表的文件,一个文件只能关闭一次,关闭之后无法对文件进行操作
成功返回0,失败返回非0
char* path = "C:\\Users\\Administrator\\Desktop\\临时.txt";
FILE* fp = fopen(path, "w+");
if (fp == NULL) {
printf("文件不存在\n");
}
else {
printf("文件打开成功\n");
}
int isClose=fclose(fp);
if (isClose == 0) {
printf("文件关闭成功\n");
}
else {
printf("文件关闭失败\n");
}
fgetc函数声明
一次读一个字符
int fgetc(FILE * fp)
从fp所代表的文件中读取一个字节,将字节值返回
以txt方式:读至文件末尾返回EOF,EOF是stdio.h文件中定义的常量,值为-1
以二进制方式:读至文件结尾以feof(FILE *fp)判断结尾
feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值;文件未结束:返回0值)。
fputc函数声明
一次写一个字符
int fputc(int c,FILE * fp)
将C的值写入fp代表的文件中
char* path = "C:\\Users\\Administrator\\Desktop\\临时.txt";
char* path2 = "C:\\Users\\Administrator\\Desktop\\临时2.txt";
FILE* fp = fopen(path, "r+");
FILE* fp2 = fopen(path2, "w+");
if (fp == NULL) {
printf("文件不存在\n");
}
else {
printf("文件打开成功\n");
int ch;
while ((ch=fgetc(fp)) != EOF) {
fputc(ch, fp2); //stdout标准输出设备
}
}
fclose(fp);
fclose(fp2);
fgets函数声明
一次读一个字符串
char fgets(char * s,int size,FILE *fp)
从fp 所代表的文件中读取字符,在读取的时候碰到换行符或者是碰到文件的末尾停止读取,或者是读取了size-1个字节停止读取,在读取的内容后面会加一个\0,作为字符串的结尾
返回值:
成功返回目的数组的首地址,即s
失败返回NULL
fputs函数声明
一次写一个字符串
int fputs(char * s,FILE *fp)
将s指向的字符串,写入到fp代表的文件中
返回值:
成功返回写入的字节数
失败返回-1
char* path = "C:\\Users\\Administrator\\Desktop\\临时.txt";
char* path2 = "C:\\Users\\Administrator\\Desktop\\临时2.txt";
FILE* fp = fopen(path, "r");
FILE* fp2 = fopen(path2, "w");
if (fp == NULL) {
printf("文件不存在\n");
}
else {
printf("文件打开成功\n");
char ch[200];
fgets(ch, 100, fp);
fputs(ch, fp2); //stdout标准输出设备
}
fclose(fp);
fclose(fp2);
fread函数声明
size_t fread(void * ptr,size_t size,size_t count,FILE *fp)
从 fp代表的文件中读取数据,一块是size字节,共count块,存放到ptr指向的内存中
返回值:实际读取到的块数
fwrite函数声明
size_t fwrite(void *ptr,size_t size,size_t count,FILE *fp)
将ptr指向的内存中的数据按块写入到fp代表的文件中,一块是size字节,共count块;
返回值:实际写入的块数
char* path = "C:\\Users\\Administrator\\Desktop\\临时.txt";
FILE* fp=fopen(path,"wb+");
if (fp == NULL) {
printf("文件不存在");
}
else {
for (size_t i = 0; i < 2; i++)
{
printf("请输入城市名称,人口(万),等级\n");
scanf("%s %d %d", cities1[i].name, &(cities1[i].num), &(cities1[i].level));
}
fwrite(cities1, sizeof(struct city), 2, fp);
rewind(fp);//将文件指针回到头部
fread(cities2, sizeof(struct city), 2, fp);
printf("%s--%d--%d\n", cities2[0].name, cities2[0].num, cities2[0].level);
printf("%s--%d--%d\n", cities2[1].name, cities2[1].num, cities2[1].level);
fclose(fp);
}