第九章 操作文件

第一節 認識文件

  • 文件:通常計算機包含各種不同類型的文件,例如照片、音樂、.c文件等。文件包含程序文件數據文件。將數據的輸入和輸出的過程稱爲數據流。一個文件包含文件路徑、文件標識符、文件後綴,例如D:\C_program\8\Debug\7.exe,後綴名exe(可執行文件)、txt(文本文件)、doc(word文件)、mp4(視頻文件)、mp3(音頻文件)。

  • 文件的分類:數據文件分爲ASCII文件二進制文件,數據在內存中是以二進制的形式進行存儲的。

  • 文件緩衝區:從磁盤中讀取數據,會先將數據存儲到輸入文件緩衝區中,等文件緩衝區裝滿了以後發送到程序數據區;輸出文件到磁盤中,會現將數據存儲到輸出文件緩衝區中,等文件緩衝區裝滿了以後再發送給磁盤。

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iSLSB9jQ-1590584641339)(E:\workspace\TyporaProjects\C筆記\網易-C程序設計第四版\images\第九章\9-1.png)]

第二節 文件的操作

  • 對文件的操作方法

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-az6BMbV3-1590584641342)(E:\workspace\TyporaProjects\C筆記\網易-C程序設計第四版\images\第九章\9-2.png)]

  • 打開文件

    打開文件不同於操作系統打開文件,打開文件的方法爲:fopen(文件名, 操作模式)fopen爲打開函數,文件名爲需要打開的文件,操作模式爲需要對文件進行何種操作。一旦文件被打開,在內存中開闢區域存放文件的有關信息(如文件的名字、文件的位置、文件的狀態等)並返回此信息。定義一個FILE類型的指針變量指向被打開文件,可以將文件信息和指針變量進行關聯。之後都可以對文件型指針變量進行操作,打開文件的常用方法爲:

    FILE *fp
    fp = fopen(文件名, 操作模式)
    
  • 操作模式:

    1. “r” :讀模式,允許對文件讀取信息。若文件名不正確,則報錯;
    2. “w” :寫模式,允許向文件寫入信息。若文件不存在,則創建一個文件;
    3. “a” :追加模式,允許在文件末尾添加信息。若文件名不正確,則報錯;
    4. “rb” “wb” “ab” 打開二進制文件,其他與以上3個相同;
    5. “r+” “w+” "a+"允許對文件讀取和寫入信息,其他與前3個相同;
    6. “rb+” “wb+” "ab+"允許對文件讀取和寫入信息,打開二進制文件,其他與前3個相同。
  • 關閉文件fclose(文件指針)

    文件使用後需要關閉文件,如果沒有及時關閉文件可能會導致數據丟失,關閉成功返回一個數值0,否則返回EOF(-1)

第三節 文件的讀寫

  • 文件打開之後,根據文件的打開模式,可以進行讀寫。

  • 向文件讀取字符fgetc(fp)

    功能:從fp指向的文件獲取一個字符。如果讀取成功返回獲取的字符,讀取失敗則返回文件結束標誌EOF(-1)

  • 向文件寫入字符fputc(c, fp)

    功能:向fp指向的文件寫入一個字符。如果寫入成功則返回寫入的字符,寫入失敗則返回文件結束標誌EOF(-1)

  • 向文件讀取字符串fgets(str, n, fp),

    功能:從fp指向的文件獲取一個長度爲n-1的字符串,並一次性存入到str字符數組中。如果讀取成功返回str指針,讀取失敗則返回NULL

    注意:

    1. 讀取的n-1個字符,最後加上一個結束標誌\0,一共n個字符串;
    2. 遇到換行符或文件結束標誌EOF,則將之前的內容存儲到str中,不再繼續讀取字符,表示本次讀取結束(最多讀取一行)。
  • 向文件寫入字符串fputs(str, fp)

    功能:將str字符數組中的內容(字符串)寫入到fp指向的文件中,如果寫入成功返回數字0,寫入失敗則返回非0的數字。

  • 格式化讀寫內容

    fprintf(文件指針, 格式字符串, 輸出表列)

    fscanf(文件指針, 格式字符串, 輸入表列)

    與printf、scanf函數相同,不同點在於不是輸出到黑框的終端或者在終端輸入信息,而是向文件寫入信息或讀取信息。

  • 向文件讀取一個數據塊

    讀取數據時,數據不經過轉換的讀取到內存中。

    fread(buffer, size, count, fp)
    參數:
        buffer:讀取的數據存入內存地址
        size:讀取的字節大小
        count:讀取數據的個數
        fp:讀取的文件指針
        返回值:返回讀取數據的個數
    
  • 向文件寫入一個數據塊

    寫入數據時,數據不經過轉換的讀取到內存中。

    fwrite(buffer, size, count, fp)
    參數:
        buffer:待寫入的內存地址buffer
        size:寫入的字節大小
        count:寫入數據的個數
        fp:寫入的文件指針
    
  • 注意:

    1. 由於fread、fwrite函數讀寫數據時不會轉換數據,因此讀取速度快;
    2. 讀取二進制文件一般使用fread、fwrite函數;
    3. fgetc、fputc、fgets、fputs、fprintf、fscanf函數是讀寫字符數據,不建議用讀取二進制文件。

第四節 改變文件讀寫位置

  • 思考:

    文件的讀寫總是從文件的開頭起始,一直讀寫到最後,但如果文件內容較多,只需要獲取某個文件指定位置的數據,這種方法就比較麻煩。不能快速獲取指定位置數據。

  • 文件讀寫指針:

    文件讀寫標記記錄訪問的位置

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Nk1oaiKp-1590584641344)(E:\workspace\TyporaProjects\C筆記\網易-C程序設計第四版\images\第九章\9-4.png)]

  • rewind函數將讀寫指針重新指向文件開頭

    rewind(fp)	//將fp指向的文件讀寫指針重新指向文件開頭
    
  • fseek函數指定文件讀寫指針位置

    fseek(文件指針, 位移量, 起始點)
        起始點:
        0		表示文件開始位置
        1		表示當前讀寫指針位置
        2		表示文件末尾位置
    

第五節 文件操作錯誤檢查

讀寫函數是否存在錯誤,除了使用函數的返回值來檢驗以外,還可以使用錯誤檢查讀寫函數是否正確執行。

  • ferror函數

    ferror(fp)
    //返回值爲0表示讀寫正確
    //返回值爲1表示讀寫錯誤
    
  • clearerr函數

    將文件錯誤標誌和文件結束標誌置爲0。當ferror檢查到讀寫函數出現錯誤,此時應當立即調用clearerr(fp),使得下一輪能正常使用ferror函數進行檢查。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章