在C言語(yǔ)中,文件操作多是由庫(kù)函數(shù)來(lái)完成的,這節(jié)引見(jiàn)文件的翻開(kāi)和封閉。
讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、雅安服務(wù)器托管、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、色尼網(wǎng)站維護(hù)、網(wǎng)站推廣。fopen() 函數(shù)用來(lái)翻開(kāi)一個(gè)文件,它的原型為:
FILE *fopen(char *filename, char *mode);
filename為文件名(包含文件途徑),mode為翻開(kāi)方法,它們多是字符串。fopen() 會(huì)獲取文件信息,包含文件名、文件形態(tài)、以后讀寫(xiě)地位等,并將這些信息保管到一個(gè)FILE類(lèi)型的構(gòu)造體變量中,然后將該變量的地址前往。
FILE是在stdio.h頭文件中界說(shuō)的一個(gè)構(gòu)造體,用來(lái)保管文件信息。
假如愿望接納 fopen() 的前往值,就需求界說(shuō)一個(gè) FILE 類(lèi)型的指針。例如:
FILE *fp = ("demo.txt", "r");
表現(xiàn)以“只讀”方法翻開(kāi)以后目次下的 demo.txt 文件,并使 fp 指向該文件,如許就可以經(jīng)過(guò) fp 來(lái)操作 demo.txt 了。fp 平日被稱(chēng)為文件指針。又如:
FILE *fp = fopen("D:\\demo.txt","rb");
表現(xiàn)以二進(jìn)制方法翻開(kāi) D 盤(pán)下的 demo.txt 文件,許可讀和寫(xiě)。
翻開(kāi)方法(mode)有多種,見(jiàn)下表:
翻開(kāi)方法 | 闡明 |
---|---|
r | 以只讀方法翻開(kāi)文件,只許可讀取,不許可寫(xiě)入。該文件必需存在。 |
r+ | 以讀/寫(xiě)方法翻開(kāi)文件,許可讀取和寫(xiě)入。該文件必需存在。 |
rb+ | 以讀/寫(xiě)方法翻開(kāi)一個(gè)二進(jìn)制文件,許可讀/寫(xiě)數(shù)據(jù)。 |
rt+ | 以讀/寫(xiě)方法翻開(kāi)一個(gè)文本文件,許可讀和寫(xiě)。 |
w | 以只寫(xiě)方法翻開(kāi)文件,若文件存在則長(zhǎng)度清為0,即該文件內(nèi)容消逝,若不存在則創(chuàng)立該文件。 |
w+ | 以讀/寫(xiě)方法翻開(kāi)文件,若文件存在則文件長(zhǎng)度清為零,即該文件內(nèi)容會(huì)消逝。若文件不存在則樹(shù)立該文件。 |
a | 以追加的方法翻開(kāi)只寫(xiě)文件。若文件不存在,則會(huì)樹(shù)立該文件,假如文件存在,寫(xiě)入的數(shù)據(jù)會(huì)被加到文件尾,即文件本來(lái)的內(nèi)容會(huì)被保存(EOF符保存)。 |
a+ | 以追加方法翻開(kāi)可讀/寫(xiě)的文件。若文件不存在,則會(huì)樹(shù)立該文件,假如文件存在,則寫(xiě)入的數(shù)據(jù)會(huì)被加到文件尾后,即文件本來(lái)的內(nèi)容會(huì)被保存(本來(lái)的EOF符 不保存)。 |
wb | 以只寫(xiě)方法翻開(kāi)或新建一個(gè)二進(jìn)制文件,只許可寫(xiě)數(shù)據(jù)。 |
wb+ | 以讀/寫(xiě)方法翻開(kāi)或樹(shù)立一個(gè)二進(jìn)制文件,許可讀和寫(xiě)。 |
wt+ | 以讀/寫(xiě)方法翻開(kāi)或樹(shù)立一個(gè)文本文件,許可讀寫(xiě)。 |
at+ | 以讀/寫(xiě)方法翻開(kāi)一個(gè)文本文件,許可讀或在文本末追加數(shù)據(jù)。 |
ab+ | 以讀/寫(xiě)方法翻開(kāi)一個(gè)二進(jìn)制文件,許可讀或在文件末追加數(shù)據(jù)。 |
文本文件和二進(jìn)制文件的差別請(qǐng)檢查:C言語(yǔ)fopen()翻開(kāi)文本文件與二進(jìn)制文件的差別
1) 文件翻開(kāi)方法由r、w、a、t、b、+ 六個(gè)字符拼成,各字符的寄義是:
r(read):讀
w(write):寫(xiě)
a(append):追加
t(text):文本文件,可省略不寫(xiě)
b(banary):二進(jìn)制文件
+:讀和寫(xiě)
2) 假如沒(méi)有“b”字符,文件以文本方法翻開(kāi)。
3) 凡用“r”翻開(kāi)一個(gè)文件時(shí),該文件必需曾經(jīng)存在。
4) 在翻開(kāi)一個(gè)文件時(shí),假如失足,fopen將前往一個(gè)空指針值NULL。在程序中可以用這一信息來(lái)判別能否完成翻開(kāi)文件的任務(wù),并作響應(yīng)的處置。因而常用以下程序段翻開(kāi)文件:
if( (fp=fopen("D:\\demo.txt","rb") == NULL ){ printf("Error on open D:\\demo.txt file!"); getch(); exit(1); }
這段程序的意義是,假如前往的指針為空,表現(xiàn)不克不及翻開(kāi)D盤(pán)根目次下的 demo.txt 文件,并給出提醒信息“error on open D:\\demo.txt file!”。第3行g(shù)etch()的功用是從鍵盤(pán)輸出一個(gè)字符,但不在屏幕上顯示。在這里,該行的感化是等候,只要當(dāng)用戶(hù)從鍵盤(pán)敲任一鍵時(shí),程序才持續(xù)履行,因而用戶(hù)可應(yīng)用這個(gè)等候工夫?yàn)g覽失足提醒。敲鍵后履行exit(1)加入程序。
5) 把一個(gè)文本文件讀入內(nèi)存時(shí),要將ASCII碼轉(zhuǎn)換成二進(jìn)制碼,而把文件以文本方法寫(xiě)入磁盤(pán)時(shí),也要把二進(jìn)制碼轉(zhuǎn)換成ASCII碼,因而文本文件的讀寫(xiě)要破費(fèi)較多的轉(zhuǎn)換工夫。對(duì)二進(jìn)制文件的讀寫(xiě)不存在這種轉(zhuǎn)換。
6) 規(guī)范輸出文件 stdin(鍵盤(pán))、規(guī)范輸入文件 stdout(顯示器)、規(guī)范毛病文件 stderr(顯示器)是由零碎翻開(kāi)的,可直接運(yùn)用。
文件一旦運(yùn)用終了,應(yīng)當(dāng)用fclose()函數(shù)把文件封閉,以釋放相干資本,防止數(shù)據(jù)喪失。fclose() 的原型為:
int fclose(FILE *fp);
fp 為文件指針。例如:
fclose(fp);
文件正常封閉時(shí),fclose() 的前往值為0,假如前往非零值則表現(xiàn)有毛病發(fā)作。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。