C語言 文件的打開與關(guān)閉詳解及示例代碼
在C語言中,文件操作都是由庫函數(shù)來完成的,這節(jié)介紹文件的打開和關(guān)閉。
文件的打開(fopen函數(shù))
fopen() 函數(shù)用來打開一個(gè)文件,它的原型為:
FILE *fopen(char *filename, char *mode);
filename為文件名(包括文件路徑),mode為打開方式,它們都是字符串。fopen() 會(huì)獲取文件信息,包括文件名、文件狀態(tài)、當(dāng)前讀寫位置等,并將這些信息保存到一個(gè)FILE類型的結(jié)構(gòu)體變量中,然后將該變量的地址返回。
FILE是在stdio.h頭文件中定義的一個(gè)結(jié)構(gòu)體,用來保存文件信息。
如果希望接收 fopen() 的返回值,就需要定義一個(gè) FILE 類型的指針。例如:
FILE *fp = ("demo.txt", "r");
表示以“只讀”方式打開當(dāng)前目錄下的 demo.txt 文件,并使 fp 指向該文件,這樣就可以通過 fp 來操作 demo.txt 了。fp 通常被
稱為文件指針。又如:
FILE *fp = fopen("D:\\demo.txt","rb");
表示以二進(jìn)制方式打開 D 盤下的 demo.txt 文件,允許讀和寫。
打開方式(mode)有多種,見下表:
| 打開方式 | 說明 |
|---|---|
| r | 以只讀方式打開文件,只允許讀取,不允許寫入。該文件必須存在。 |
| r+ | 以讀/寫方式打開文件,允許讀取和寫入。該文件必須存在。 |
| rb+ | 以讀/寫方式打開一個(gè)二進(jìn)制文件,允許讀/寫數(shù)據(jù)。 |
| rt+ | 以讀/寫方式打開一個(gè)文本文件,允許讀和寫。 |
| w | 以只寫方式打開文件,若文件存在則長(zhǎng)度清為0,即該文件內(nèi)容消失,若不存在則創(chuàng)建該文件。 |
| w+ | 以讀/寫方式打開文件,若文件存在則文件長(zhǎng)度清為零,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。 |
| a | 以追加的方式打開只寫文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾,即文件原先的內(nèi)容會(huì)被保留(EOF符保留)。 |
| a+ | 以追加方式打開可讀/寫的文件。若文件不存在,則會(huì)建立該文件,如果文件存在,則寫入的數(shù)據(jù)會(huì)被加到文件尾后,即文件原先的內(nèi)容會(huì)被保留(原來的EOF符 不保留)。 |
| wb | 以只寫方式打開或新建一個(gè)二進(jìn)制文件,只允許寫數(shù)據(jù)。 |
| wb+ | 以讀/寫方式打開或建立一個(gè)二進(jìn)制文件,允許讀和寫。 |
| wt+ | 以讀/寫方式打開或建立一個(gè)文本文件,允許讀寫。 |
| at+ | 以讀/寫方式打開一個(gè)文本文件,允許讀或在文本末追加數(shù)據(jù)。 |
| ab+ | 以讀/寫方式打開一個(gè)二進(jìn)制文件,允許讀或在文件末追加數(shù)據(jù)。 |
文本文件和二進(jìn)制文件的區(qū)別請(qǐng)查看:C語言fopen()打開文本文件與二進(jìn)制文件的區(qū)別
幾點(diǎn)說明
1) 文件打開方式由r、w、a、t、b、+ 六個(gè)字符拼成,各字符的含義是:
- r(read):讀
- w(write):寫
- a(append):追加
- t(text):文本文件,可省略不寫
- b(banary):二進(jìn)制文件
- +:讀和寫
2) 如果沒有“b”字符,文件以文本方式打開。
3) 凡用“r”打開一個(gè)文件時(shí),該文件必須已經(jīng)存在。
4) 在打開一個(gè)文件時(shí),如果出錯(cuò),fopen將返回一個(gè)空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,并作相應(yīng)的處理。因此常用以下程序段打開文件:
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行g(shù)etch()的功能是從鍵盤輸入一個(gè)字符,但不在屏幕上顯示。在這里,該行的作用是等待,只有當(dāng)用戶從鍵盤敲任一鍵時(shí),程序才繼續(xù)執(zhí)行,因此用戶可利用這個(gè)等待時(shí)間閱讀出錯(cuò)提示。敲鍵后執(zhí)行exit(1)退出程序。
5) 把一個(gè)文本文件讀入內(nèi)存時(shí),要將ASCII碼轉(zhuǎn)換成二進(jìn)制碼,而把文件以文本方式寫入磁盤時(shí),也要把二進(jìn)制碼轉(zhuǎn)換成ASCII碼,因此文本文件的讀寫要花費(fèi)較多的轉(zhuǎn)換時(shí)間。對(duì)二進(jìn)制文件的讀寫不存在這種轉(zhuǎn)換。
6) 標(biāo)準(zhǔn)輸入文件 stdin(鍵盤)、標(biāo)準(zhǔn)輸出文件 stdout(顯示器)、標(biāo)準(zhǔn)錯(cuò)誤文件 stderr(顯示器)是由系統(tǒng)打開的,可直接使用。
文件關(guān)閉(fclose函數(shù))
文件一旦使用完畢,應(yīng)該用fclose()函數(shù)把文件關(guān)閉,以釋放相關(guān)資源,避免數(shù)據(jù)丟失。fclose() 的原型為:
int fclose(FILE *fp);
fp 為文件指針。例如:
fclose(fp);
文件正常關(guān)閉時(shí),fclose() 的返回值為0,如果返回非零值則表示有錯(cuò)誤發(fā)生。
以上就是對(duì)文件的基礎(chǔ)資料進(jìn)行的詳解,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對(duì)本站的支持!
上一篇:C++實(shí)現(xiàn)順序表的常用操作(插入刪出查找輸出)
欄 目:C語言
本文標(biāo)題:C語言 文件的打開與關(guān)閉詳解及示例代碼
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2099.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法


