程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> C語言文件的打開與關閉

C語言文件的打開與關閉

編輯:C語言基礎知識
在C語言中,文件操作都是由庫函數來完成的,這節介紹文件的打開和關閉。

文件的打開(fopen函數)

fopen() 函數用來打開一個文件,它的原型為:
FILE *fopen(char *filename, char *mode);
filename為文件名(包括文件路徑),mode為打開方式,它們都是字符串。fopen() 會獲取文件信息,包括文件名、文件狀態、當前讀寫位置等,並將這些信息保存到一個FILE類型的結構體變量中,然後將該變量的地址返回。
FILE是在stdio.h頭文件中定義的一個結構體,用來保存文件信息。
如果希望接收 fopen() 的返回值,就需要定義一個 FILE 類型的指針。例如:
FILE *fp = fopen("demo.txt", "r");
表示以“只讀”方式打開當前目錄下的 demo.txt 文件,並使 fp 指向該文件,這樣就可以通過 fp 來操作 demo.txt 了。fp 通常被稱為文件指針。又如:
FILE *fp = fopen("D:\\demo.txt","rb");
表示以二進制方式打開 D 盤下的 demo.txt 文件,允許讀和寫。

打開方式(mode)有多種,見下表:
打開方式 說明 r 以只讀方式打開文件,只允許讀取,不允許寫入。該文件必須存在。 r+ 以讀/寫方式打開文件,允許讀取和寫入。該文件必須存在。 rb+ 以讀/寫方式打開一個二進制文件,允許讀/寫數據。 rt+ 以讀/寫方式打開一個文本文件,允許讀和寫。 w 以只寫方式打開文件,若文件存在則長度清為0,即該文件內容消失,若不存在則創建該文件。 w+ 以讀/寫方式打開文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。 a 以追加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留(EOF符保留)。 a+ 以追加方式打開可讀/寫的文件。若文件不存在,則會建立該文件,如果文件存在,則寫入的數據會被加到文件尾後,即文件原先的內容會被保留(原來的EOF符 不保留)。 wb 以只寫方式打開或新建一個二進制文件,只允許寫數據。 wb+ 以讀/寫方式打開或建立一個二進制文件,允許讀和寫。 wt+ 以讀/寫方式打開或建立一個文本文件,允許讀寫。 at+ 以讀/寫方式打開一個文本文件,允許讀或在文本末追加數據。 ab+ 以讀/寫方式打開一個二進制文件,允許讀或在文件末追加數據。
文本文件和二進制文件的區別請查看:C語言fopen()打開文本文件與二進制文件的區別

幾點說明

1) 文件打開方式由r、w、a、t、b、+ 六個字符拼成,各字符的含義是:
  • r(read):讀
  • w(write):寫
  • a(append):追加
  • t(text):文本文件,可省略不寫
  • b(banary):二進制文件
  • +:讀和寫

2) 如果沒有“b”字符,文件以文本方式打開。

3) 凡用“r”打開一個文件時,該文件必須已經存在。

4) 在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,並作相應的處理。因此常用以下程序段打開文件:
if( (fp=fopen("D:\\demo.txt","rb") == NULL ){
    printf("Error on open D:\\demo.txt file!");
    getch();
    exit(1);
}
這段程序的意義是,如果返回的指針為空,表示不能打開D盤根目錄下的 demo.txt 文件,並給出提示信息“error on open D:\\demo.txt file!”。第3行getch()的功能是從鍵盤輸入一個字符,但不在屏幕上顯示。在這裡,該行的作用是等待,只有當用戶從鍵盤敲任一鍵時,程序才繼續執行,因此用戶可利用這個等待時間閱讀出錯提示。敲鍵後執行exit(1)退出程序。

5) 把一個文本文件讀入內存時,要將ASCII碼轉換成二進制碼,而把文件以文本方式寫入磁盤時,也要把二進制碼轉換成ASCII碼,因此文本文件的讀寫要花費較多的轉換時間。對二進制文件的讀寫不存在這種轉換。

6) 標准輸入文件 stdin(鍵盤)、標准輸出文件 stdout(顯示器)、標准錯誤文件 stderr(顯示器)是由系統打開的,可直接使用。

文件關閉(fclose函數)

文件一旦使用完畢,應該用fclose()函數把文件關閉,以釋放相關資源,避免數據丟失。fclose() 的原型為:
int fclose(FILE *fp);
fp 為文件指針。例如:
fclose(fp);
文件正常關閉時,fclose() 的返回值為0,如果返回非零值則表示有錯誤發生。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved