用二进制方式向文件读写一组数据
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
fread;
#include<stdio.h>
#define SIZE 10
struct student_type
{
char name[10];
int num;
int age;
char addr[15];
}stud[SIZE];
void save()
{
FILE *fp;
int i;
if((fp=fopen("stu.dat","wb"))==NULL)
{
printf("cannot open file\n");
return ;
}
for(i=0; i<SIZE; i++)
if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
int main()
{
int i;
printf("Please enter data of student :\n");
for(i=0; i<SIZE; i++)
scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
save();
return 0;
}
fwrite(buffer,size,count,fp);
#include<stdio.h>
#include<stdlib.h>
#define SIZE 10
struct Student_type
{
char name[10];
int num;
int age;
char addr[15];
}stud[SIZE];
int main()
{
int i;
FILE *fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("cannot open file\b");
exit(0);
}
for(i=0;i<SIZE;i++)
{
fread(&stud[i],sizeof(struct Student_type),1,fp);
printf("%-10s %4d %4d%-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
}
fclose(fp);
return 0;
}
随机读写数据文件
1.文件位置标记
rewind()是文件位置标记指向文件开头
#include<stdio.h>
int main()
{
FILE *fp1,*fp2;
fp1=fopen("file1.dat","r");
fp2=fopen("file2.dat","w");
while(!feof(fp1)) putchar(getc(fp1));
putchar(10);
rewind(fp1);
while(!feof(fp1)) putc(getc(fp1),fp2);
fclose(fp1);
fclose(fp2);
return 0;
}
fseek(文件类型指针,位移量,起始点);
SEEK_SET 0 起始位置
SEEK_CUR 1 当前位置
SEEK_END 2 文件末尾位置
fseek(fp,100L,0);
fseek(fp,50L,1);
fseek(fp,-10L,2);
ftell(fp) //获取当前位置;
i=ftell(fp);
if(i==-1L) printf("error\n");
磁盘文件上存有10个学生的数据。要求将第1,3,5,7,8,9个学生数据输入计算机,并在屏幕上显示出来。
#include<stdio.h>
#include<stdlib.h>
struct Student_type
{
char name[10];
int num;
int age;
char addr[15];
}stud[10];
int main()
{
int i;
FILE *fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("can not open file\n");
exit(0);
}
for(i=0;i<10;i+=2)
{
fseek(fp,i*sizeof(struct Student_type),0);
fread(&stud[i],sizeof(struct Student_type),1,fp);
printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
}
fclose(fp);
return 0;
}
ferror(fp)//如果返回值为0(假),表示为出错;如果返回一个非零值,表示出错。
clearerr(fp)//clearer的作用是使文件错误标志和文件结束标志置为0,