一、常用函數
二、檔案指標,指向檔案的指標
FILE*fp;
三、檔案的開啟與關閉
FILE*fp=fopen(檔案名稱,使用檔案方式)
如:FILE*fp=NULL;
fp=fopen(”file.txt”,”r”);//r表示讀檔案
intresult=fclose(fp);//=0,如果不等於0,表示發生錯誤
四、讀寫方式
五、補充:
\0:表示字串結束
\n:表示斷行符號換行
EOF:表示檔案的末尾
六、關於中文讀取
因為一個漢字佔三個位元組,一個位元組等於8位
在C語言裡每個字串結束時都以\0
所以在讀取的時候不能唯讀三個,會亂碼
FILE*fp=fopen(“a.txt”,”r”);
//a.txt裡存放的是中文
錯誤碼如:charch[3];fgets(ch,3,fp);printf("%s\n",ch);
正確代碼如:charch[4];fgets(ch,4,fp);printf("%s\n",ch);
七、範例程式碼1#include<stdio.h>#include<string.h>intmain(intargc,constchar*argv[]){//定義檔案指標FILE*fw=NULL;fw=fopen("a.txt","w");charch[7]="abcdefg";if(fw!=NULL){//寫入for(inti=0;i<strlen(ch);i++){printf("%c\t",ch[i]);fputc(ch[i],fw);}}else{printf("寫入失敗。");getchar();exit(1);}printf("\n");FILE*fr=NULL;fr=fopen("a.txt","r");if(fr!=NULL){charc=fgetc(fr);//讀取while(c!=EOF){putchar(c);c=fgetc(fr);}}else{printf("讀取失敗。");getchar();exit(1);}//fclose(fw);//fclose(fr);printf("\n");return0;}
七、範例程式碼2#include<stdio.h>#include<string.h>intmain(intargc,constchar*argv[]){//定義檔案指標FILE*fp=NULL;fp=fopen("a.txt","a+");if(fp!=NULL){//寫入printf("請輸入字元");charch=getchar();intcount=0;while(ch!='\n'){count++;fputc(ch,fp);ch=getchar();}fclose(fp);printf("\n");//把指標移到開始位置rewind(fp);//讀取資料ch=fgets(fp);while(ch!=EOF){putchar(ch);ch=fgets(fp);}}else{printf("寫入失敗。");getchar();exit(1);}printf("\n");return0;}
八、fread與fwrite函數
1)fread(buffer,size,count,fp);
2)fwrite(buffer,size,count,fp):
範例程式碼:
fwrite寫入資料FILE*fp=fopen("a.txt","wb");if(fp!=NULL){char*ch="kkkkkkk\n";fwrite(ch,1,strlen(ch),fp);fwrite(ch,1,strlen(ch),fp);}else{printf("寫入失敗。");getchar();exit(1);}fclose(fp);
fread讀取資料FILE*fp=fopen("a.txt","rb");if(fp!=NULL){charch[100];fread(ch,1,sizeof(ch),fp);printf("%s\n",ch);}else{printf("寫入失敗。");getchar();exit(1);}fclose(fp);
九、結構體的讀寫#include<stdio.h>structStudent{charname[20];intage;floatscore;};intmain(intargc,constchar*argv[]){//定義數組structStudentstu[3]={{"tom",22,89},{"kite",34,67},{"jelly",21,90}};FILE*fp=fopen("stu.data","wb+");if(fp!=NULL){for(inti=0;i<3;i++){fwrite(&stu[i],sizeof(structStudent),1,fp);}printf("寫入成功!\n");rewind(fp);structStudents[3];for(inti=0;i<3;i++){fread(&s[i],sizeof(structStudent),1,fp);printf("%s\t",s[i].name);}}fclose(fp);printf("\n\n");return0;}
十、fscanf和fprintf的用法
樣本1#include<stdio.h>intmain(intargc,constchar*argv[]){//寫入9##2;到檔案test.txtinta=9;intb=2;FILE*fp=fopen("text.txt","w+");if(fp!=NULL){fprintf(fp,"%d##%d;",a,b);rewind(fp);intm=0;intn=0;fscanf(fp,"%d##%d;",&m,&n);printf("m=%d,n=%d",m,n);}printf("\n");return0;}
樣本2#include<stdio.h>/**讀寫如下檔案1,2#3,4#5,6#*/intmain(intargc,constchar*argv[]){//定義數組charch[3][2]={1,2,3,4,5,6};//定義指標FILE*fp=fopen("a.txt","w+");//if(fp!=NULL){//寫入for(inti=0;i<3;i++){fprintf(fp,"%d,%d#",ch[i][0],ch[i][1]);}printf("寫入成功\n");rewind(fp);//讀取intarr[3][2];for(inti=0;i<3;i++){fscanf(fp,"%d,%d#",&arr[i][0],&arr[i][1]);printf("%d,%d",arr[i][0],arr[i][1]);}}fclose(fp);return0;}
十一、檔案隨機讀取,定位fseek
fseek(fp,curPosition,headPosition);
如:fseek(fp,100L,0);
檔案首:SEEK_SET0
當前位置:SEEK_CUR1
檔案尾部:SEEK_END2
樣本:讀取第二個學生的成績#include<stdio.h>structStudent{charname[20];intage;floatscore;};intmain(intargc,constchar*argv[]){//定義數組structStudentstu[3]={{"tom",22,89},{"kite",34,67},{"jelly",21,90}};FILE*fp=fopen("stu.data","wb+");if(fp!=NULL){for(inti=0;i<3;i++){fwrite(&stu[i],sizeof(structStudent),1,fp);}printf("寫入成功!\n");//定位到第二個學生fseek(fp,sizeof(structStudent),SEEK_SET);fread(&stu,sizeof(structStudent),1,fp);printf("%s\t",stu.name);}}fclose(fp);printf("\n\n");return0;}