目录
1.fopen 打开文件
1.1 只读打开文件,并且文件不存在
1.2 只写打开文件,并且文件不存在
1.3 只写打开文件,并且文件存在,且有内容
1.4 追加只写打开文件,并且文件不存在
2. fclose 关闭文件
3. fgetc 读取一个字符
4.fputc 写入一个字符
5.fgets 从文件中读取一行字符串
(1)读取的字节数小于文件一行内容,提前结束读取
(2)读取的字节数小于文件一行内容,提前结束读取
6.fputs 向文件写入一个字符串
1.fopen 打开文件
函数原型:
/* 功能:创建或者打开一个文件
参数:
path:文件名,如果只写文件名,默认就是当前路径,也可以添加路径
mode:文件权限
r 只读打开:如果文件不存在则报错,文件存在只读打开
r+ 读写打开,如果文件不存在则报错,文件存在读写打开
w 只写打开,如果文件不存在则创建;如果文件存在则清空,只写打开;
w+ 读写打开,如果文件不存在则创建;如果文件存在则清空,读写打开
a 追加只写打开,如果文件不存在则创建;如果文件存在直接追加,只写打开
a+ 追加读写打开,如果文件不存在则创建;如果文件存在则追加读写打开返回值:成功:文件指针失败:NULL */
FILE *fopen(const char *path, const char *mode);
1.1 只读打开文件,并且文件不存在
程序:
#include <stdio.h>int test1()
{//使用fopen函数打开或者创建文件,返回文件指针FILE *fp = NULL;//以只读的方式打开文件,如果文件不存在则报错fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose关闭文件fclose(fp);
}int main(int argc, char *argv[])
{test1(fp);return 0;
}
运行结果:
1.2 只写打开文件,并且文件不存在
程序:
#include <stdio.h>int test2()
{//使用fopen函数打开或者创建文件,返回文件指针FILE *fp = NULL;//以只写的方式打开文件,如果文件不存在则创建,如果文件存在清空fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose关闭文件fclose(fp);
}int main(int argc, char *argv[])
{ test2();return 0;
}
运行结果:
1.3 只写打开文件,并且文件存在,且有内容
程序:与3.2只写打开文件,并且文件不存在,程序相同
运行结果:
1.4 追加只写打开文件,并且文件不存在
程序:
#include <stdio.h>int test3()
{//使用fopen函数打开或者创建文件,返回文件指针FILE *fp = NULL;//以只写的方式打开文件,如果文件不存在则创建,文件存在则追加fp = fopen("./file.txt", "a");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose关闭文件fclose(fp);
}int main(int argc, char *argv[])
{test3();return 0;
}
运行结果:
2. fclose 关闭文件
/*
功能:关闭一个文件指针,无法在对当前文件进行操作
参数:
stream:指定的文件指针,fopen函数的返回值返回值:
成功:0
失败:EOF注意:注意一个文件只能关闭一次,不能多次关闭。
关闭文件之后就不能再文件指针对文件进行读写等操作了。
*/
int fclose(FILE *stream);
程序:见fopen 打开文件,程序最后。
3. fgetc 读取一个字符
函数原型:
/* 功能:从文件指针标识的文件中读取一个字符参数:stream:指定的文件指针返回值:成功:读取的字符失败:EOF如果文件读取完毕,也会返回EOF */int fgetc(FILE *stream);
程序:
#include <stdio.h>int test1()
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgetc从文件中读取一个字符int c = fgetc(fp);printf("c = [%c] - %d\n", c, c);printf("test1 end \n");
}int main(int argc, char *argv[])
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//文件的每一行结束的位置都有一个标识,是一个换行符,称之为行结束符//fgetc可以读取到行结束符int c;while((c = fgetc(fp)) != EOF){printf("c = [%c] - %d ", c, c);}printf(" \ntest1 start \n");test1();return 0;
}
运行结果:
4.fputc 写入一个字符
函数原型:
/* 功能:向文件指针标识的文件中写入一个字符参数:c:要写入的字符stream:指定的文件指针返回值:成功:要写入的字符失败:EOF */
int fputc(int c, FILE *stream);
程序:
#include <stdio.h>int test1()
{FILE *fp = NULL;//只写打开./file.txt,不存在则创建文件,文件存在则清空fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}int i;//通过fputc函数向文件写入一个字符i = fputc('h', fp);i = fputc('e', fp);i = fputc('l', fp);i = fputc('\n', fp);i = fputc('l', fp);i = fputc('o', fp);if(i == EOF){printf("fail to fputc\n");return -1;}return 0;
}int main(int argc, char *argv[])
{test1();return 0;
}
运行结果:
5.fgets 从文件中读取一行字符串
函数原型:
/* 功能:从文件中读取内容
参数:
s:保存读取到的内容
size:每次读取的最大个数
stream:文件指针返回值:
成功:读取的数据的首地址
失败:NULL如果文件内容读取完毕,也返回NULL注意:从stream所指的文件中读取字符,在读取的时候碰到换行符或者是碰到文件的末尾停止读取,或者是读取了size‐1个字节停止读取,在读取的内容后面会加一个\0,作为字符串的结尾 */
char *fgets(char *s, int size, FILE *stream);
(1)读取的字节数小于文件一行内容,提前结束读取
程序:
#include <stdio.h>//fgets读取的字节数大于文件一行内容,碰到 换行符 \n 提前结束读取
int test1()
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgets读取文件内容//fgets每次读取时最多读取文件一行内容,只要遇到行结束符就立即返回char buf[32] = {0};//从fp里读取32个字节到buffgets(buf, 32, fp);printf("buf = %s\n", buf);printf("test1 end \n");
}int main(int argc, char *argv[])
{printf("test1 start \n");test1();return 0;
}
运行结果:
(2)读取的字节数小于文件一行内容,提前结束读取
程序:
#include <stdio.h>//fgets读取的字节数小于文件一行内容,提前结束读取
int test2()
{FILE *fp = NULL;//file.txt内容 0123459789abcdefghijABCDEFGHIJfp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgets读取文件内容//fgets每次读取时最多读取文件一行内容,只要遇到行结束符就立即返回char buf[32] = {0};//从fp里读取15个字节到buffgets(buf, 15, fp);printf("buf = %s\n", buf);printf("test2 end \n");
}int main(int argc, char *argv[])
{printf("test2 start \n");test2();return 0;
}
运行结果:
6.fputs 向文件写入一个字符串
函数原型:
/* 功能:向文件写入数据参数:s:要写入的内容stream:文件指针返回值:成功:写入文件内容的字节数失败:EOF */
int fputs(const char *s, FILE *stream);
程序:
#include <stdio.h>int main(int argc, char *argv[])
{FILE *fp = NULL;fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}//通过fputs函数向文件写入数据fputs("0123459789\n", fp);fputs("ABCDEFGHIJ", fp);fputs("9876543210", fp);return 0;
}
运行结果:
file.txt内容: