和檔案相關的函式(序)
之前整理了常見的一些和檔案相關的函式,今天再補充幾個和檔案相關的函式: feof() feof()是一個c語言函式,既可用以判斷二進位制檔案又可用以判斷文字檔案。用來檢測檔案結束,函式原型為: int feof(FILE *stream); 如果檔案結束,則返回非0值(-1),否則返回0,檔案結束符只能被clearerr()清除。如下面例子(讀該檔案本身並列印輸出):
#include<stdio.h> int main(){
FILE *file; char c; file=fopen("user.txt","r"); if(!file){ printf("檔案開啟失敗!"); } //while(1){// 將1替換為feof while(!feof(file)){ c=fgetc(file); if(c==EOF){ break; } printf("%s",c); } }
ferror() ferror()用來檢查引數所指定的檔案流是否發生了錯誤情況, 如有錯誤發生則返回非0 值。函式原型為: int ferror(FILE *stream); 通過如下例子來學習ferror()的用法: #include<stdio.h> int main(){
FILE *file; char c; file=fopen("user.txt","r"); if(!file){ printf("檔案開啟失敗!"); return 1; } fputc('a',file); if(ferror(file)){ perror("fputc");//列印錯誤資訊 clearerr(file);//清除錯誤標誌 } c=fgetc(file);//讀取一個字元 printf("讀到了:\n",c); if(ferror(file)){ perror("fgetc");//列印錯誤資訊 } close(file); return 0; }
fseek() fseek()是檔案定位函式,檔案始終只能從當前的位置向檔案尾的方向讀寫。函式的原型為: int fseek(file *stream, long offset , int origin); 引數二; 偏移量 可正 可負; <0 向檔案頭方向偏移; >0 向檔案尾方向偏移; 引數三: 設定從檔案的哪裡開始偏移,可能取值為: SEEK_SET: 檔案開頭 SEEK_CUR: 當前位置 SEEK_END: 檔案結尾 其中SEEK_SET,SEEK_CUR和SEEK_END依次為0,1和2. 簡言之: fseek(fp,100L,0);把檔案內部指標移動到離檔案開頭100位元組處; fseek(fp,100L,1);把檔案內部指標移動到離檔案當前位置100位元組處; fseek(fp,-100L,2);把檔案內部指標退回到離檔案結尾100位元組處。
#include<stdio.h>
int main(){
FILE *file;
char c;
char line[256];
int i;
file=fopen("user.txt","r");
if(!file){
printf("檔案開啟失敗!");
return 1;
}
//把當前檔案的位置定位到倒數第十個字元
//fseek(file,-10,SEEK_END);
//讀取最後10個字元
/*while((c=fgetc(file))!=EOF){
printf("%c",c);
}
*/
//讀取檔案的第一行
fseek(file,0,SEEK_SET);
fgets(line,sizeof(line),file);
printf("第一行是:%s\n",line);
//讀取當前位置的前五個字元
fseek(file,-5,SEEK_CUR);
for(i=0;i<5;i++){
c=fgetc(file);
printf("%c",c);
}
//結果為865,回車佔2個字元
close(file);
}