您好,登錄后才能下訂單哦!
在C言語中,文件操作多是由庫函數來完成的,這節引見文件的翻開和封閉。
fopen() 函數用來翻開一個文件,它的原型為:
FILE *fopen(char *filename, char *mode);
filename為文件名(包含文件途徑),mode為翻開方法,它們多是字符串。fopen() 會獲取文件信息,包含文件名、文件形態、以后讀寫地位等,并將這些信息保管到一個FILE類型的構造體變量中,然后將該變量的地址前往。
FILE是在stdio.h頭文件中界說的一個構造體,用來保管文件信息。
假如愿望接納 fopen() 的前往值,就需求界說一個 FILE 類型的指針。例如:
FILE *fp = ("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() 的原型為:
int fclose(FILE *fp);
fp 為文件指針。例如:
fclose(fp);
文件正常封閉時,fclose() 的前往值為0,假如前往非零值則表現有毛病發作。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。