文件出錯處理

檢查文件是否出錯

  • 使用到的函數(shù)
    int ferror(FILE * pf)
    測試文件是否出錯
    返回值: 出錯, 返回非0, 沒有出錯,則返回0
    每次在調(diào)用文件輸入輸出函數(shù)的時候,都會產(chǎn)生一個新的ferror函數(shù)值, 所有應(yīng)該即時的調(diào)用這個函數(shù)檢測文件狀態(tài),fopen打開文件時,ferror函數(shù)的初始值自動置為0

  • 簡單的測試demo如下:
    #include <stdio.h>
    #include <stdlib.h>
    int main(void){
    FILE * pf;
    pf = fopen("E:/test.txt", "r");
    if(pf == NULL){
    printf("open file err\n");
    return;
    }
    printf("open file success\n");
    fputs("寒塘渡鶴影,冷月葬花魂", pf);
    if (ferror(pf) != 0){
    printf("file status err\n");
    }else{
    printf("file status correct\n");
    }
    if(pf != NULL){
    fclose(pf);
    }
    }

輸出文件錯誤信息

  • 使用到的函數(shù)
    void perror(const char *s);
    在文件狀態(tài)出錯的情況下,先輸出傳入的字符串參數(shù),并且拼接上冒號,然后輸出錯誤的信息

簡單的測試demo:
//需要在E盤創(chuàng)建一個文件test.txt,然后修改文件的屬性為只讀權(quán)限
#include <stdio.h>
#include <stdlib.h>
int main(void){ //手動在 char * path = "E:/test.txt"; FILE * pf = fopen(path, "w"); if(pf == NULL){ printf("open file err"); perror("output error info :"); return 0; } fputs("hello china", pf); fclose(pf); getchar(); return 0; }

清除文件錯誤狀態(tài),恢復(fù)正常

  • 使用到的函數(shù)
    void clearerr(FILE *pf)
    重置文件流的狀態(tài), 清除錯誤信號,使文件恢復(fù)正常狀態(tài),如果不清除,下一次對文件的正常操作還會保持出錯
    man手冊中的解釋(本人翻譯)

stdio中的函數(shù)維持了一個對文件的異常指示器,用于記錄對文件流的讀寫操作是否有異常發(fā)生.
同樣的,它也維持一個是否到達文件結(jié)尾的EOF指示器.
使用clearerr()用于清除這兩個指示器


#include <stdio.h>
#include <stdlib.h>
int main(void){ char * path = "E:/test.txt"; FILE * pf = fopen(path, "w"); //以只讀方式文件 if(pf == NULL){ perror("open file error"); //輸出錯誤信息 return -1; } fputs("some times, i walk into the rain", pf); rewind(pf); char ch = fgetc(pf); //從文件讀取一個字符 //可能返回-1(EOF), 讀取失敗返回-1, 讀取到文件最后位置也返回-1 if(ch == EOF){ if(feof(pf)){ //是否到達文件的末尾 printf("at the end of file"); clearerr(pf); //重置文件流的狀態(tài), 清除錯誤信號,文件恢復(fù)正常狀態(tài),如果不清楚,下一次對文件的正常操作還會出錯 } if(ferror(pf)){ //返回非0, 文件io流操作出錯 perror("read file error"); clearerr(pf);//重置文件流的狀態(tài) } } fclose(pf); getchar(); return 0; }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容