|
//隨機(jī)讀寫(xiě)數(shù)據(jù),讀寫(xiě)操作由文件內(nèi)部指針指向決定
#include"stdio.h"
#include"stdlib.h"
//聲明一個(gè)數(shù)據(jù)塊
struct student
{
char name[10];
int age;
float score;
};//該結(jié)構(gòu)體占用20個(gè)字節(jié)
void main()
{
FILE *fp;
student s1[]={{"wangyan",40,89.0},{"王玚",6,99.1}};//初始化兩個(gè)學(xué)生對(duì)象信息
student s2[2],*p1,*p2;
p1=s1;
p2=s2;
fp=fopen("testfseek.txt","wt+");
if(fp==NULL)
{
printf("文件打開(kāi)失敗");
getchar();
exit(1);
}
else
{
printf("文件打開(kāi)成功!\n");
fwrite(p1,sizeof(struct student),2,fp);//
if(feof(fp)>1) printf("文件已結(jié)尾\n");//如果feof(fp)返回值大于1,說(shuō)明文件內(nèi)部指針指向結(jié)尾
else printf("文件不在結(jié)尾處\n");
fseek(fp,sizeof(struct student),SEEK_SET);
//將文件內(nèi)部指針定位到從文件頭起始后移sizeof(struct student)字節(jié)處
int i=ftell(fp);
printf("當(dāng)前文件內(nèi)部指針離文件頭字節(jié)數(shù):%d\n",i);
fread(p2,sizeof(struct student),1,fp);
printf("讀到的內(nèi)容是:\n");
printf("%s %d %f\n",p2->name,p2->age,p2->score);
fseek(fp,0,0);//文件內(nèi)部指針重新定位到文件頭,偏移0個(gè)字節(jié)
char ch=fgetc(fp);
printf("重新讀到的字符是:\n");
while(ch!=EOF)//如果沒(méi)有這個(gè)循環(huán)體 if(feof(fp)>1) 表達(dá)式就不會(huì)為真
{
printf("%c",ch);
ch=fgetc(fp);
}
printf("\n");
if(feof(fp)>1) printf("文件已結(jié)尾\n");//如果feof(fp)返回值大于1,說(shuō)明文件內(nèi)部指針指向結(jié)尾
else printf("文件不在結(jié)尾處\n");
if(ferror(fp)==0)printf("文件沒(méi)有出錯(cuò)!\n");
else printf("文件出錯(cuò)!\n");
}
if(NULL==fclose(fp))printf("文件關(guān)閉成功\n");
else printf("文件關(guān)閉失敗\n");
}
/*
fseek(FILE *,int(位移字節(jié)數(shù)),0(文件內(nèi)部指針位移起始處))
0 SEEK_SET:文件頭
1 SEEK_CUR:文件當(dāng)前位置
2 SEEK_END:文件尾

////////////----------GKXW--////////2015年11月24日23:01:00///////////
*/
|
|