1.文件基本操作
文件的打开基本格式:
FILE *fp;
fp=fopen(文件名,使用文件方式);
文件使用方式
可以进行文件创建加个*
1.r(只读) 2.w(只写*) 3.a(追加) 4.rb(只读) 5.wb(只写*) 6.ab(追加)
7.r+(读写) 8.w+(读写*) 9.a+(读写) 10.rb+(读写) 11.wb+(读写*)
12.ab+(读写)
例只读形式打开文档格式:
FILE *fp;
fp=fopen("1.txt","w");
文件关闭的基本格式:
fclose(文件指针);
正常关闭返回值为0;失败返回值EOF;
2.文件写入
1.fputc函数
作用将一个字符写进磁盘文件
一般形式:
ch=fputc(ch,fp);
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char ch;
if((fp = fopen("01.txt", "w")) == NULL)
{
printf("不能打开文件\n");
exit(0);
}
printf("请输入名人名言:\n");
ch = getchar();
while(ch != '#')
{
fputc(ch, fp);
ch = getchar();
}
fclose(fp);
return 0;
}
2.fputs函数
作用将一个字符串写入文件中。
一般形式:
fputs(字符串,文件指针);
#include<stdio.h>
#include<process.h>
int main()
{
FILE *fp;
char filename[30],str[30];
printf("请输入文件路径:\n");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("不能打开文件!\n请按任意键结束\n");
getchar();
exit(0);
}
printf("请输入歌词:\n");
getchar();
gets(str);
fputs(str,fp);
fclose(fp);
return 0;
}
3.fprintf函数
将对应的文件写入对应的文档之中。
一般形式:
ch=fprintf(文件类型指针,格式字符串,输出列表);
#include<stdio.h>
#include<process.h>
int main()
{
FILE *fp;/*定义一个指向FILE类型结构体的指针变量*/
int i=1;
int j=2;
char filename[30]; /*定义一个字符型数组*/
printf("请输入保存文件路径:\n");/*输入文件名*/
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL) /*判断文件是否打开失败*/
{
printf("不能打开文件!\n请按任意键结束\n");
getchar();
exit(0);
}
fprintf(fp,"%4d\n",i);/*写入fp所指的磁盘文件中*/
fprintf(fp,"%2d",i);
fprintf(fp,"%4d\n",i);
fprintf(fp,"%d",i);
fprintf(fp,"%3d",j);
fprintf(fp,"%4d\n",i);
fclose(fp);
return 0;
}
4.fwrite函数
将buffer地址信息输出count次,每次将size字节写入fp所指向的文件中。
一般形式:
fwrite(buffer,size,count,fp);
#include<stdio.h>
#include<process.h>
struct address_list /*定义结构体,存储实习生成绩信息*/
{
char name[10];
char adr[20];
char tel[15];
} info[100];
void save(char *name, int n) /*自定义save函数*/
{
FILE *fp; /*定义一个指向FILE类型结构体的指针变量*/
int i;
if((fp = fopen(name, "wb")) == NULL) /*以只写方式打开指定文件*/
{
printf("不能打开文件\n");
exit(0);
}
for(i = 0; i < n; i++)
if(fwrite(&info[i], sizeof(struct address_list), 1, fp) != 1) /*将一组数据输出到fp所指的文件中*/
printf("写入有误\n"); /*如果写入文件不成功,则输出错误*/
fclose(fp); /*关闭文件*/
}
void show(char *name, int n) /*自定义show函数*/
{
int i;
FILE *fp; /*定义一个指向FILE类型结构体的指针变量*/
if((fp = fopen(name, "rb")) == NULL) /*以只读方式打开指定文件*/
{
printf("不能打开文件\n");
exit(0);
}
for(i = 0; i < n; i++)
{
fread(&info[i], sizeof(struct address_list), 1, fp); /*从fp所指向的文件读入数据存到score数组中*/
printf("%15s%20s%20s\n", info[i].name, info[i].adr,info[i].tel);
}
fclose(fp); /*关闭文件*/
}
int main()
{
int i, n; /*变量类型为基本整型*/
char filename[50]; /*数组为字符型*/
printf("一共几名?\n");
scanf("%d", &n); /*输入实习生数*/
printf("请输入文件路径:\n");
scanf("%s", filename); /*输入文件所在路径及名称*/
printf("请输入姓名,地址,手机号\n");
for (i = 0; i < n; i++) /*输入实习生信息*/
{
printf("NO%d", i + 1);
scanf("%s%s%s", info[i].name, info[i].adr, info[i].tel);
save(filename, n); /*调用函数save*/
}
printf("信息如下:\n");
show(filename, n); /*调用函数show*/
}
3.文件读取
1.fgetc函数
作用从指定的文件之中,读取一个字符赋予给ch
一般形式:
ch=fgetc(ch,fp);
#include<stdio.h>
int main()
{
FILE *fp;
char ch;
fp = fopen("poem.txt", "r");
ch = fgetc(fp);
while(ch != EOF)
{
putchar(ch);
ch = fgetc(fp);
}
printf("\n");
fclose(fp);
return 0;
}
2.fgets函数
作用从指定的文件之中,读取一个字符串赋予给ch
一般形式:
fgets(字符串,文件指针);
#include<stdio.h>
#include<process.h>
int main()
{
FILE *fp;
char filename[30],str[30];
printf("请输入文件路径:\n");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
{
printf("不能打开文件!\n请按任意键结束\n");
getchar();
exit(0);
}
fgets(str,sizeof(str),fp);
printf("%s",str);
printf("\n");
fclose(fp);
return 0;
}
3.fscanf函数
将对应的文件写入对应的文档之中。
一般形式:
fscanf(文件类型指针,格式字符串,输入列表);
#include<stdio.h>
#include<process.h>
int main()
{
FILE *fp;
char i,j;
char filename[30];
printf("请输入文件路径:\n");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
{
printf("不能打开文件!\n请按任意键继续\n");
getchar();
exit(0);
}
for(i=0;i<15;i++)
{
fscanf(fp,"%c",&j);
printf("%d answer is:%5c\n",i+1,j);
}
fclose(fp);
fclose(fp);
return 0;
}
4.fread函数
从fp指向的文件夹读取count次,每次读取size字节,读取的信息保存在buffer地址之中。
一般形式:
fread(buffer,size,count,fp);
#include<stdio.h>
#include<process.h>
struct address_list /*定义结构体,存储实习生成绩信息*/
{
char name[10];
char adr[20];
char tel[15];
} info[100];
void save(char *name, int n) /*自定义save函数*/
{
FILE *fp; /*定义一个指向FILE类型结构体的指针变量*/
int i;
if((fp = fopen(name, "wb")) == NULL) /*以只写方式打开指定文件*/
{
printf("不能打开文件\n");
exit(0);
}
for(i = 0; i < n; i++)
if(fwrite(&info[i], sizeof(struct address_list), 1, fp) != 1) /*将一组数据输出到fp所指的文件中*/
printf("写入有误\n"); /*如果写入文件不成功,则输出错误*/
fclose(fp); /*关闭文件*/
}
void show(char *name, int n) /*自定义show函数*/
{
int i;
FILE *fp; /*定义一个指向FILE类型结构体的指针变量*/
if((fp = fopen(name, "rb")) == NULL) /*以只读方式打开指定文件*/
{
printf("不能打开文件\n");
exit(0);
}
for(i = 0; i < n; i++)
{
fread(&info[i], sizeof(struct address_list), 1, fp); /*从fp所指向的文件读入数据存到score数组中*/
printf("%15s%20s%20s\n", info[i].name, info[i].adr,info[i].tel);
}
fclose(fp); /*关闭文件*/
}
int main()
{
int i, n; /*变量类型为基本整型*/
char filename[50]; /*数组为字符型*/
printf("一共几名?\n");
scanf("%d", &n); /*输入实习生数*/
printf("请输入文件路径:\n");
scanf("%s", filename); /*输入文件所在路径及名称*/
printf("请输入姓名,地址,手机号\n");
for (i = 0; i < n; i++) /*输入实习生信息*/
{
printf("NO%d", i + 1);
scanf("%s%s%s", info[i].name, info[i].adr, info[i].tel);
save(filename, n); /*调用函数save*/
}
printf("信息如下:\n");
show(filename, n); /*调用函数show*/
}
4.文件定位
1.fseek函数
fseek函数的作用是移动文件内部的位置指针:
一般形式:
fseek(文件类型指针,位移量,起始点);
起始点 | 表示符号 | 数字表示
文件首 | SEEK-SET | 0
文件当前位置 | SEEK-CUR | 1
文件尾 | SEEK-END | 2
例子:当前位置后退20个字节
fseek(fp,-20L,1);
2.rewind函数
rewind函数用来讲位置指针返回开头,没有返回值。
一般形式:
int rewind(文件类型指针);
3.ftell函数
ftell函数可获取文件当前位置
一般形式:
long ftell(文件类型指针);