1、基本函数fclose,fopen,fprintf,fscanf,fseek,ftell,rewind,fread,fwrite
2、对于fseek中SEEK_SET=0(起始位置),SEEK_CUR=1(当前位置),SEEK_END=2(结束)
3、注意FILE这个文件指针其实是一个结构体
4、对于打开文件的读写方式:
①对于txt文件:rt+(允许读写,不能建立文件)、wt+(允许读写和建立文件)、at+(允许读,或者在文件末尾追加)
②rb+,wb+ ,ab+ 是对于二进制文件
注意:a.哪种r在文件不存在的情况下都不会建立新文件
b.用w打开文件,如果写入东西,会把原来文件内容全部覆盖
#include<stdio.h>
#include<stdlib.h>
int getFileSize(char * strFileName)
{
FILE * fp = fopen(strFileName, "r");
fseek(fp, 0L, SEEK_END);//SEEK_END是文件末尾,0L是定位在第0个位置,表示遍历整个文件
int size = ftell(fp); //前面说过FILE是一个结构体,所以fseek之后就储存了文件信息
fclose(fp);
return size;
}
int main()
{
char filename[10];
printf("输入文件名字");
gets(filename);
printf("size=%d\n",getFileSize(filename));
}
6、使用fscanf,fprintf进行操作,以输入学生信息为例
#include<stdio.h>
#include<stdlib.h>
#define N 30
struct stu{
char num[20];
char name[40];
char gender[20];
}class[N];
int main()
{
FILE *fp;
int i;
char filename[50];
printf("输入文件名");//注意文件名可以加上目录
gets(filename);
printf("请输入数据:");
fopen(filename,"w+");
if(fp==NULL)
{
printf("不能打开文件");
exit(1);
}
for(i=0;i<N;i++)
{
printf("\n输入第%d个人的信息",i+1);
printf("\n输入学号");//gets只能接受字符串
gets(class[i].num);
printf("\n请输入姓名");
gets(class[i].name);
printf("\n请输入性别 ");
gets(class[i].gender);
fprintf(fp,"%s %s %s\n",class[i].num,class[i].name,class[i].gender);
}
fclose(fp);//将缓冲区内容放入文件,防止内容丢失
fp=fopen(filename,"r");
printf("班级数据\n");
printf("学号 姓名 性别\n");
i=0;
while(fscanf(fp,"%s %s %s",class[i].num,class[i].name,class[i].gender)!=EOF)
{
printf("%s %s %s\n",class[i].num,class[i].name,class[i].gender);
i++;
}
fclose(fp);
}
7、和6一样的问题,但是使用fread和fwrite
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 30
struct stu{
char num[20];
char name[40];
char gender[20];
}class[N];
int main()
{
FILE *fp;
int i;
char filename[50];
printf("输入文件名");//注意文件名可以加上目录
gets(filename);
printf("请输入数据:");
fopen(filename,"w+");
if(fp==NULL)
{
printf("不能打开文件");
exit(1);
}
for(i=0;i<N;i++)
{
printf("\n输入第%d个人的信息",i+1);
printf("\n输入学号");//gets只能接受字符串
gets(class[i].num);
printf("\n请输入姓名");
gets(class[i].name);
printf("\n请输入性别 ");
gets(class[i].gender);
fwrite(&class[i],sizeof(struct stu),1,fp);//从那个地址读取,读取字节大小,次数,文件指针
}
fclose(fp);//将缓冲区内容放入文件,防止内容丢失
fp=fopen(filename,"r");
printf("班级数据\n");
printf("学号 姓名 性别\n");
i=0;
while(fread(&class[i],sizeof(struct stu),1,fp)!=EOF)
{
printf("%s %s %s\n",class[i].num,class[i].name,class[i].gender);
i++;
}
fclose(fp);
}