標(biāo)題: 文件操作之--隨機(jī)讀寫,檢測(cè)fseek(),ferror()-C語(yǔ)言教程 [打印本頁(yè)]

作者: 51黑ren    時(shí)間: 2015-12-20 03:07
標(biāo)題: 文件操作之--隨機(jī)讀寫,檢測(cè)fseek(),ferror()-C語(yǔ)言教程
//隨機(jī)讀寫數(shù)據(jù),讀寫操作由文件內(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("文件打開失敗");
    getchar();
        exit(1);
  }
  else
  {
     printf("文件打開成功!\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///////////

*/







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1