目录
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");
return 0;
}
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();
fclose(fp);
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;
}
fclose(fp);
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个字节到buf
fgets(buf, 32, fp);
printf("buf = %s\n", buf);
printf("test1 end \n");
return 0;
}
int main(int argc, char *argv[])
{
printf("test1 start \n");
test1();
fclose(fp);
return 0;
}
运行结果:
(2)读取的字节数小于文件一行内容,提前结束读取
程序:
#include <stdio.h>
//fgets读取的字节数小于文件一行内容,提前结束读取
int test2()
{
FILE *fp = NULL;
//file.txt内容 0123459789abcdefghijABCDEFGHIJ
fp = fopen("./file.txt", "r");
if(fp == NULL)
{
printf("fail to fopen\n");
return -1;
}
//使用fgets读取文件内容
//fgets每次读取时最多读取文件一行内容,只要遇到行结束符就立即返回
char buf[32] = {0};
//从fp里读取15个字节到buf
fgets(buf, 15, fp);
printf("buf = %s\n", buf);
printf("test2 end \n");
return 0;
}
int main(int argc, char *argv[])
{
printf("test2 start \n");
test2();
fclose(fp);
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);
fclose(fp);
return 0;
}
运行结果:
file.txt内容: