一、文件:
1.程序文件(文件的内容为程序代码):源程序文件(.c)、目标文件(.obj)、可执行文件(.exe)
2.数据文件:文件的内容是 供程序运行时读写/读入的数据(程序运行过程中输出到磁盘)数据文件根据数据的组织形式又可以分为:ASCII文件(在存储前进行转转)和二进制文件(不加转换地输出到外存)
--------C语言一般处理的数据的输入和输出都是从终端的键盘输入数据,运行结果输出到终端显示器,如果要将一些数据输出到磁盘保存,就需要用到 磁盘文件。
文件标识:1.文件 路径 2.文件名主干 3.文件后缀 eg:D:\c\file.txt
二、文件的打开与关闭
**文件的打开需要定义一个指针变量来指向该文件,建立文件与指针变量之间的联系,对文件的读写等操作都是通过这个指针变量来进行的。关闭文件也就是撤销文件信息区和文件缓冲区。**
fopen和fclose函数的调用形式:
fopen(文件名,使用文件方式);fopen函数的返回值是指向文件的指针
fclose(文件指针)文件不关闭则会丢失数据
C语言中文件的操作语法中,打开文件有以下几种模式:
向文件读写字符和字符串操作需要用到的函数有:
三、以二进制形式向文件读写一组数据
用到的函数有fread()和fwrite()。
调用形式为:
fread(buffer【存放从文件读入的数据在存储区的地址】,size【要读写的字节数】,count【要读写多少个数据项】,fp【FILE类型指针】);
fwrite(buffer【把地址开始的存储区中的数据向文件输出】,size【要读写的字节数】,count【要读写多少个数据项】,fp【FILE类型指针】);
代码实现:
文件的输入输出的封装结构:
void inputStruct();//向结构体中输入数据
void ouputStruct();//输出结构体中的数据
int saveFile();//以二进制形式写文件
int freadFile(FILE *fp);//以二进制形式读文件
const int size=3;
struct Student{
char name[10];
int num;
int age;
char addr[15];
}stud[size];
void inputStruct(){
int i;
printf("enter data of students's name,num,age,addr:\n");
for(i=0;i<size;i++){
scanf("%s%d%d%s",
&stud[i].name,&stud[i].num,
&stud[i].age,&stud[i].addr);
}
ouputStruct();
}
void ouputStruct(){
printf("结构体中存入的数据为:\n");
for(int i=0;i<size;i++){
printf("%s\t%d\t%d\t%s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
}
}
int saveFile(){
FILE *fp;
if((fp=fopen("two.dat","wb"))==NULL){
printf("file failed");
return 0;
}else{
for(int i=0;i<size;i++){
if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)
printf("write failed");
}
}
fclose(fp);
freadFile(fp);
return 0;
}
int freadFile(FILE *fp){
if((fp=fopen("two.dat","rb"))==NULL){
printf("file failed");
return 0;
}else{
for(int i=0;i<size;i++){
fread(&stud[i],sizeof(struct Student),1,fp);
}
}
fclose(fp);
return 0;
}
int main()
{
inputStruct();
saveFile();
return 0;
}