1、文件的打开:fopen()
用法:fopen("文件位置","打开方式");
"r":以只读方式打开文本文件
"r+":以读写方式打开文本文件
"rb":以只读方式打开二进制文件
"rb+":以读写方式打开二进制文件
"w":以写的方式新建文本文件(会覆盖同名文件)
"w+":以读写方式新建文本文件(会覆盖同名文件)
"wb":以写的方式新建二进制文件(会覆盖同名文件)
"wb+":以读写方式新建二进制文件(会覆盖同名文件)
"a":以"尾部追加"写的方式打开文本文件
"a+":以"尾部追加"读写的方式打开文本文件
"ab":以"尾部追加"写的方式打开二进制文件
"ab+":以"尾部追加"读写的方式打开二进制文件
具体用法:假设要以只读方式打开D盘a目录下的file.txt文件
#include<stdio.h>
int mian(){
FILE * p;
p = fopen("D:\\a\\file.txt","r");
return 0;
}
指针p就会指向这个文件的内容。
2、文件的关闭:fclose()
用来把打开的文件关闭,当进行写操作后,会将所写内容存入缓冲区,关闭文件或者程序运行结束后才会写入文件中。
具体用法:
#incldue<stdio.h>
int mian(){
FILE * p;
p = fopen("D:\\a\\file.txt","r");//打开文件
fclose(p);//关闭文件
return 0;
}
3、fgetc():从文件读取一个字符
具体用法:
#include<stdio.h>
int mian(){
FILE * p;
p = fopen("D:\\a\\file.txt","r");//打开文件
fgetc(p);
fclose(p);//关闭文件
return 0;
}
执行后就会从文件中读取一个文件指针所指的字符,如果想要连续读取可以用一个循环,如果读取不到字符,fgetc()函数返回值为EOF。
4、fputc():在文件中写入一个字符
此函数中有两个参数,具体用法如下:
#include<stdio.h>
int mian(){
FILE * p;
char a = 'A';
p = fopen("D:\\a\\file.txt","w");//打开文件
fputc(a,p);
fclose(p);//关闭文件
return 0;
}
此时就会将字符'A'存入新建文件file.txt中。
5、fgets():从文件中读取一行(遇回车结束)
此函数有三个参数:fgets(内容,长度,输入设备);
注意:最多读取长度-1个字符。
例:将文件a.txt打印到屏幕
#include<stdio.h>
int main(){
FILE *f;
char a[128];//存储从文件中读取到的字符串
f = fopen("t7.c","r");
while(fgets(a,sizeof(a),f)){ //当读不到东西时,返回值为0,跳出循环
printf("%s",f);
}
return 0;
}
读取失败时,fgets()函数返回值为NULL。
6、fputs():写一行到文件中
此函数有两个参数:fputs(内容,输出设备)
例:将文件a.txt的内容复制到新建文件b.txt中
int main(){
FILE * f1;
FILE * f2;
char a[128];
//打开文件
f1 = fopen("a.txt","r");
f2 = fopen("b.txt","w");
//读取a.txt中的一行并存入b.txt中
while(fgets(a,sizeof(a),f1)){
fputs(a,f2);
}
//关闭文件
fclose(f1);
fclose(f2);
return 0;
}
7、fprintf():往文件中写入格式化数据
例:往新建文件a.txt中存入字符串
#include<stdio.h>
int main(){
char a[] = hello world!;
FILE * f;
//打开文件
f = fopen("a.txt","w");
fprintf(f,"%s",a);
//关闭文件
fclose(f);
return 0;
}
8、fscanf():格式化读取文件中的数据
例:假设文件a.txt中内容如下:
那么如果想只读取姓名和成绩,就需要格式化的输入:
#include<stdio.h>
int main(void){
FILE * f;
char name[64];
int gra;
//打开文件
f = fopen("a.txt", "r");
if(!f){
printf("打开文件失败!\n");
return 1;
}
//格式化输入并打印到屏幕
while(fscanf(f,"姓名:%s 成绩:%d\n",name,&gra) != EOF){
printf("%s %d\n",name,gra);
}
return 0;
}
结果:
韩跑跑 90
秦拆拆 10
读取成功时,返回读取的数据个数;读取失败时返回EOF。
9、fwrite():以二进制形式往文件中写入数据
此函数有四个参数:fwrite(数据起始地址,一个数据所占大小,要写入的数据个数,文件指针)
例如,要把整形数组a[10]={10,20}写入文件b.txt,文件指针为f,整形为4字节,总共要存两个整形,所以就可以fwrite(a,4,2,f),具体代码如下:
#include<stdio.h>
int main(){
int a[64] = {10,20};
FILE * f;
f = fopen("b.txt","wb");
fwrite(a,4,2,f);
fclose(f);
return 0;
}
10、fread():以二进制形式从文件中读取数据
与fwrite相对应,fread也有四个参数:fread(要存入的数据起始地址,一个数据所占大小,要读取的数据个数,文件指针)
具体用法如下:
#include<stdio.h>
int main(){
int a[64];
FILE * f;
f = fopen("b.txt","rb");
fread(a,4,2,f);
fclose(f);
printf("%d\n",a[0]);
printf("%d\n",a[1]);
return 0;
}
虽然以二进制写入文件之后打开的文件是乱码,但是读出后又会变成写入时的数据
结果:
10
20