内容:文件操作,主要为文本文件和二进制文件的读写操作。
相关函数包含在<stdio.h>头文件
打开文件
调用方式:fopen(文件名,使用文件方式);
文件名要把文件说在路径写出来,可以是绝对路径,也可是相对路径,如果与c程序在同一级目录下,只需要写文件名就可以了。
如下1.1
FILE *fp; //定义一个指向文件的指针变量fp
fp = fopen("file","r") //以只读形式打开file文件,使得fp与file连接起来
说明:如果fp的值为NULL,表明要操作的文件对象出现问题,无法打开。
使用文件方式
方式 | 含义 | 文件对象 |
---|---|---|
“r” | 只读 | 文本 |
“w” | 只写 | 文本 |
“a” | 追加 | 文本 |
“rb” | 只读 | 二进制 |
“wb” | 只写 | 二进制 |
“ab” | 追加 | 二进制 |
“r+” | 读写 | 文本 |
“w+” | 读写 | 文本 |
“a+” | 读写 | 文本 |
“rb+” | 读写 | 二进制 |
“wb+” | 读写 | 二进制 |
“ab+” | 读写 | 二进制 |
关闭文件
调用方式:fclose(fp);
顺序读写文本文件
向文件读写字符
函数名 | 形式 | 功能 | 返回值 |
---|---|---|---|
fgetc | fgetc(fp) | 从文件中读入一个字符 | 所读字符,失败返回-1 |
fputs | fputc(ch,fp) | 将字符ch写入文件中 | 所写字符,失败返回-1 |
在c程序路径下建立文件1.txt。
从键盘输入字符,写到文件中
3.1
#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("1.txt","w");
char ch = getchar();
while(ch != '#') {
fputc(ch,fp);
ch = getchar();
}
fclose(fp);
return 0;
}
从文件读入,打印在屏幕上
3.2
#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("1.txt","r");
char ch;
while(ch != EOF) {
ch = fgetc(fp);
putchar(ch);
}
fclose(fp);
return 0;
}
向文件读写字符串
函数名 | 形式 | 功能 | 返回值 |
---|---|---|---|
fgets | fgets(str,n,fp) | 从文件中读入长度为n-1的字符到str | 成功返回str的地址,失败返回NULL |
fputs | fputs(str,fp) | 将字符串写入文件中 | 成功返回0,失败返回非0 |
写入字符串
3.3
#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("1.txt","w");
char str[100];
scanf("%s",str); //或gets(str);
fputs(str,fp);
fclose(fp);
return 0;
}
读入字符串
3.4
#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("1.txt","r");
char str[100];
fgets(str,90,fp);
printf("%s",str);
fclose(fp);
return 0;
}
格式化读写文件
前面介绍的都是对字符或字符串进行读写操作,实际上,也可以int,double这些数据类型进行操作。
调用方式:
fscanf(文件指针,格式化字符串,输入);
fprintf(文件指针,格式化字符串,输出);
如下:
int i;
double j;
fscanf(fp,"%d %lf",&i,&j);
fprintf(fp,"%d %lf",i,j);
顺序读写二进制文件
用二进制方式向读写数据的好处是可以对任何文件进行读写操作。
调用方式:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
字段 | 说明 |
---|---|
buffer | 要读入或写出到的地址 |
size | 要读写字节数 |
count | 要读写多少个数据项,每个数据项长度为size |
fp | 文件指针 |
4.1
#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("1.dat","wb+");
int val = 10.0;
fwrite(&val,sizeof(int),1,fp);
fclose(fp);
fp = fopen("1.dat","rb+");
int ans = 0;
fread(&ans,sizeof(int),1,fp);
printf("%d",ans);
fclose(fp);
return 0;
}