C語(yǔ)言文件操作函數(shù) 溫馨提示:亮點(diǎn)在最后! 函數(shù)介紹文件打開(kāi)與關(guān)閉操作fopen():文件打開(kāi)操作頭文件:stdio.h 函數(shù)定義:FILE *fopen(char *pname, char *mode) 函數(shù)說(shuō)明:pname是文件名,mode是打開(kāi)文件的方式 mode:''r'' 打開(kāi)一個(gè)已經(jīng)存在的文件文本,文件不存在則出錯(cuò) 以“r+”的方式打開(kāi)一個(gè)文件,會(huì)清空文件的原始內(nèi)容,重新寫入數(shù)據(jù) 返回值:正常返回:FILE *一個(gè)指向文件在內(nèi)存中的文件信息去的開(kāi)頭 異常返回:NULL,表示打開(kāi)操作不成功 打開(kāi)文件的作用是: (1)分配給打開(kāi)文件一個(gè)FILE 類型的文件結(jié)構(gòu)體變量,并將有關(guān)信息填入文件結(jié)構(gòu)體變量; (2)開(kāi)辟一個(gè)緩沖區(qū); (3)調(diào)用操作系統(tǒng)提供的打開(kāi)文件或建立新文件功能,打開(kāi)或建立指定文件; FILE *:指出fopen是一個(gè)返回文件類型的指針函數(shù); 返回值 正常返回:被打開(kāi)文件的文件指針。 異常返回:NULL,表示打開(kāi)操作不成功。 要說(shuō)明的是:C語(yǔ)言將計(jì)算機(jī)的輸入輸出設(shè)備都看作是文件。例如,鍵盤文件、屏幕文件等。ANSI C標(biāo)準(zhǔn)規(guī)定,在執(zhí)行程序時(shí)系統(tǒng)先自動(dòng)打開(kāi)鍵盤、屏幕、錯(cuò)誤三個(gè)文件。這三個(gè)文件的文件指針?lè)謩e是:標(biāo)準(zhǔn)輸入stdin、標(biāo)準(zhǔn)輸出stdout和標(biāo)準(zhǔn)出錯(cuò) stderr。 fclose():文件關(guān)閉函數(shù)定義:int fclose(FILE *fp); 函數(shù)說(shuō)明:fp是一個(gè)以打開(kāi)的文件的文件指針 返回值: 正常返回:0 異常返回:EOF,表示文件在關(guān)閉時(shí)發(fā)生錯(cuò)誤 fgetc:讀取一個(gè)字符函數(shù)定義:int fgetc(FILE *fp) 函數(shù)說(shuō)明:從fp中讀取一個(gè)字符,作為返回值返回 返回值: 正常返回:返回讀取字符的代碼 異常返回:返回EOF。例如:要從“寫打開(kāi)”的文件中讀取一個(gè)字符時(shí),會(huì)發(fā)生錯(cuò)誤而返回一個(gè)EOF 【例1】顯示指定文件的內(nèi)容。 //程序名為:display.c//執(zhí)行時(shí)可用:display filename1 形式的命令行運(yùn)行。顯示文件filename1中的內(nèi)容。例如,執(zhí)行命令行display display.c將在屏幕上顯示display的原代碼。 //File display program.#include 函數(shù)定義:int fputc(int ch, FILE*fp) 函數(shù)說(shuō)明:ch是一個(gè)整型變量,要寫到文件的字符 fp:文件指針,要寫入的文件 返回值: 正常返回:要寫入的字符的代碼 異常返回:返回EOF 【例2】將一個(gè)文件的內(nèi)容復(fù)制到另一個(gè)文件中去。 //程序名為:copyfile.c//執(zhí)行時(shí)可用:copyfile filename1 filename2形式的命令行運(yùn)行,將文件filename1中的內(nèi)容復(fù)制到文件filename2中去。//file copy program.#include 【例3】按十進(jìn)制和字符顯示文件代碼,若遇不可示字符就用井號(hào)''#''字符代替之。 //程序名為:dumpf.c//執(zhí)行時(shí)可用:dumpf filename1 形式的命令行運(yùn)行。// File dump program.#include
函數(shù)定義:char *fgets(char *str, int n, FILE *fp) 函數(shù)說(shuō)明:由fp指出的文件中讀取n-1個(gè)字符,并把他們存放到有str指出的字符數(shù)組中區(qū),最后加上一個(gè)由字符串結(jié)束符''\0'' 參數(shù)說(shuō)明:str:接受字符串的內(nèi)存地址,可以是數(shù)組別名,也可以是指針 n:指出要讀取的字符的個(gè)數(shù) fp:這個(gè)是文件指針,指出要從中讀取字符的文件 返回值: 正常返回:字符串的內(nèi)存首地址,即str的值 異常返回:返回一個(gè)NULL值,此時(shí)應(yīng)當(dāng)用feof()或ferror()函數(shù)來(lái)判別是讀取到了文件尾,還是發(fā)生了錯(cuò)誤。 fputs():寫入字符串到文件中去函數(shù)定義:把由str之處的字符串寫入到fp所指的文件中去 函數(shù)說(shuō)明: str:之處要寫入到文件中去的字符串,不包括最后的''\0'' fp:這個(gè)是文件指針,之處字符串要寫入到的文件指針 返回值: 正常返回:寫入到的文件的字符個(gè)數(shù),即字符串的長(zhǎng)度 非正常返回:返回一個(gè)NULL值,此時(shí)應(yīng)當(dāng)用feof()或ferror()函數(shù)來(lái)判別是讀取到了文件尾,還是發(fā)生了錯(cuò)誤。 5.實(shí)例 【例4】以下程序?qū)⒁粋€(gè)文件的內(nèi)容附加到另一個(gè)文件中去。 //程序名:linkfile.c//執(zhí)行時(shí)可用:linkfile filename1 filename2形式的命令行運(yùn)行,將文件filename2的內(nèi)容附加在文件filename1之后。// file linked program.#include E. 往文件中寫格式化數(shù)據(jù) 1.函數(shù)原型 int fprintf(FILE *fp,char *format,arg_list) 2.功能說(shuō)明 將變量表列(arg_list)中的數(shù)據(jù),按照f(shuō)ormat指出的格式,寫入由fp指定的文件。fprintf()函數(shù)與printf()函數(shù)的功能相同,只是printf()函數(shù)是將數(shù)據(jù)寫入屏幕文件(stdout)。 3.參數(shù)說(shuō)明 fp:這是個(gè)文件指針,指出要將數(shù)據(jù)寫入的文件。 format:這是個(gè)指向字符串的字符指針,字符串中含有要寫出數(shù)據(jù)的格式,所以該字符串成為格式串。格式串描述的規(guī)則與printf()函數(shù)中的格式串相同。 arg_list:是要寫入文件的變量表列,各變量之間用逗號(hào)分隔。 4.返回值 無(wú)。 5. 實(shí)例 【例5】下列程序的執(zhí)行文件為display.exe,執(zhí)行時(shí)鍵入命令行: display [-i][-s] filename 下面的表格列出了命令行參數(shù)的含義及其功能: //存儲(chǔ)文件名:save.txt//程序代碼如下:// file display program.#include G. 以二進(jìn)制形式讀取文件中的數(shù)據(jù) 1. 函數(shù)原型 int fread(void *buffer,unsigned sife,unsigned count,FILE *fp) 2. 功能說(shuō)明 從由fp指定的文件中,按二進(jìn)制形式將sife*count個(gè)數(shù)據(jù)讀到由buffer指出的數(shù)據(jù)區(qū)中。 3. 參數(shù)說(shuō)明 buffer:這是一個(gè)void型指針,指出要將讀入數(shù)據(jù)存放在其中的存儲(chǔ)區(qū)首地址。 sife:指出一個(gè)數(shù)據(jù)塊的字節(jié)數(shù),即一個(gè)數(shù)據(jù)塊的大小尺寸。 count:指出一次讀入多少個(gè)數(shù)據(jù)塊(sife)。 fp:這是個(gè)文件指針,指出要從其中讀出數(shù)據(jù)的文件。 4.返回值 正常返回:實(shí)際讀取數(shù)據(jù)塊的個(gè)數(shù),即count。 異常返回:如果文件中剩下的數(shù)據(jù)塊個(gè)數(shù)少于參數(shù)中count指出的個(gè)數(shù),或者發(fā)生了錯(cuò)誤,返回0值。此時(shí)可以用feof()和ferror()來(lái)判定到底出現(xiàn)了什么 情況。 H. 以二進(jìn)制形式寫數(shù)據(jù)到文件中去 1. 函數(shù)原型 int fwrite(void *buffer,unsigned sife,unsigned count,FILE *fp) 2. 功能說(shuō)明 按二進(jìn)制形式,將由buffer指定的數(shù)據(jù)緩沖區(qū)內(nèi)的sife*count個(gè)數(shù)據(jù)寫入由fp指定的文件中去。 3. 參數(shù)說(shuō)明 buffer:這是一個(gè)void型指針,指出要將其中數(shù)據(jù)輸出到文件的緩沖區(qū)首地址。 sife:指出一個(gè)數(shù)據(jù)塊的字節(jié)數(shù),即一個(gè)數(shù)據(jù)塊的大小尺寸。 count:一次輸出多少個(gè)數(shù)據(jù)塊(sife)。 fp:這是個(gè)文件指針,指出要從其中讀出數(shù)據(jù)的文件。 4.返回值 正常返回:實(shí)際輸出數(shù)據(jù)塊的個(gè)數(shù),即count。 異常返回:返回0值,表示輸出結(jié)束或發(fā)生了錯(cuò)誤。 5.實(shí)例 【例6】 #include I. 以二進(jìn)制形式讀取一個(gè)整數(shù) 1. 函數(shù)原型 int getw(FILE *fp) 2. 功能說(shuō)明 從由fp指定的文件中,以二進(jìn)制形式讀取一個(gè)整數(shù)。 3. 參數(shù)說(shuō)明 fp:是文件指針。 4. 返回值 正常返回:所讀取整數(shù)的值。 異常返回:返回EOF,即-1。由于讀取的整數(shù)值有可能是-1,所以必須用feof()或ferror()來(lái)判斷是到了文件結(jié)束,還是出現(xiàn)了一個(gè)出錯(cuò)。 5. 實(shí)例 【例7】 #include J. 以二進(jìn)制形式存貯一個(gè)整數(shù) 1.函數(shù)原型 int putw(int n,FILE *fp) 2. 功能說(shuō)明 以二進(jìn)制形式把由變量n指出的整數(shù)值存放到由fp指定的文件中。 3. 參數(shù)說(shuō)明 n:要存入文件的整數(shù)。 fp:是文件指針。 4. 返回值 正常返回:所輸出的整數(shù)值。 異常返回:返回EOF,即-1。由于輸出的整數(shù)值有可能是-1,所以必須用feof()或ferror()來(lái)判斷是到了文件結(jié)束,還是出現(xiàn)了一個(gè)出錯(cuò)。 5. 實(shí)例 【例8】 #include * 文件狀態(tài)檢查 A. 文件結(jié)束 (1) 函數(shù)原型 int feof(FILE *fp) (2) 功能說(shuō)明 該函數(shù)用來(lái)判斷文件是否結(jié)束。 (3) 參數(shù)說(shuō)明 fp:文件指針。 (4) 返回值 0:假值,表示文件未結(jié)束。 1:真值,表示文件結(jié)束。 (5) 實(shí)例 【例9】 #include B. 文件讀/寫出錯(cuò) (1) 函數(shù)原型 int ferror(FILE *fp) (2) 功能說(shuō)明 檢查由fp指定的文件在讀寫時(shí)是否出錯(cuò)。 (3) 參數(shù)說(shuō)明 fp:文件指針。 (4) 返回值 0:假值,表示無(wú)錯(cuò)誤。 1:真值,表示出錯(cuò)。 C. 清除文件錯(cuò)誤標(biāo)志 (1) 函數(shù)原型 void clearerr(FILE *fp) (2) 功能說(shuō)明 清除由fp指定文件的錯(cuò)誤標(biāo)志。 (3) 參數(shù)說(shuō)明 fp:文件指針。 (4) 返回值 無(wú)。 (5) 實(shí)例 【例10】 #include D. 了解文件指針的當(dāng)前位置 (1) 函數(shù)原型 long ftell(FILE *fp) (2) 功能說(shuō)明 取得由fp指定文件的當(dāng)前讀/寫位置,該位置值用相對(duì)于文件開(kāi)頭的位移量來(lái)表示。 (3) 參數(shù)說(shuō)明 fp:文件指針。 (4) 返回值 正常返回:位移量(這是個(gè)長(zhǎng)整數(shù))。 異常返回:-1,表示出錯(cuò)。 (5) 實(shí)例 * 文件定位 A. 反繞 (1) 函數(shù)原型 void rewind(FILE *fp) (2) 功能說(shuō)明 使由文件指針fp指定的文件的位置指針重新指向文件的開(kāi)頭位置。 (3) 參數(shù)說(shuō)明 fp:文件指針。 (4) 返回值 無(wú)。 (5) 實(shí)例 【例11】 #include B. 隨機(jī)定位 (1) 函數(shù)原型 int fseek(FILE *fp,long offset,int base) (2) 功能說(shuō)明 使文件指針fp移到基于base的相對(duì)位置offset處。 (3)參數(shù)說(shuō)明 fp:文件指針。 offset:相對(duì)base的字節(jié)位移量。這是個(gè)長(zhǎng)整數(shù),用以支持大于64KB的文件。 base:文件位置指針移動(dòng)的基準(zhǔn)位置,是計(jì)算文件位置指針位移的基點(diǎn)。ANSI C定義了base的可能取值,以及這些取值的符號(hào)常量。 (4)返回值 正常返回:當(dāng)前指針位置。 異常返回:-1,表示定位操作出錯(cuò)。 (5)實(shí)例 【例12】 #include * 關(guān)于exit()函數(shù) 1. 函數(shù)原型 void exit(int status) 2. 功能說(shuō)明 exit()函數(shù)使程序立即終止執(zhí)行,同時(shí)將緩沖區(qū)中剩余的數(shù)據(jù)輸出并關(guān)閉所有已經(jīng)打開(kāi)的文件。 3. 參數(shù)說(shuō)明 status:為0值表示程序正常終止,為非0值表示一個(gè)定義錯(cuò)誤。 4. 返回值 無(wú)。 * 關(guān)于feof()函數(shù) 1. 函數(shù)原型 int feof(FILE *fp) 2. 功能說(shuō)明 在文本文件(ASCII文件)中可以用值為-1的符號(hào)常量EOF來(lái)作為文件的結(jié)束符。但是在二進(jìn)制文件中-1往往可能是一個(gè)有意義的數(shù)據(jù),因此不能用它 來(lái)作為文件的結(jié)束標(biāo)志。為了能有效判別文件是否結(jié)束,ANSI C提供了標(biāo)準(zhǔn)函數(shù)feof(),用來(lái)識(shí)別文件是否結(jié)束。 3. 參數(shù)說(shuō)明 fp:文件指針。 4. 返回值 返回為非0值:已到文件尾。 返回為0值:表示還未到文件尾。 寫在最后喜歡此篇文章或覺(jué)得這篇文章對(duì)你有幫助的讀者可以點(diǎn)播關(guān)注或者轉(zhuǎn)發(fā),私信小編001即可獲得小編自己整理的一份2018最新的C/C++資料和0基礎(chǔ)入門教程,歡迎初學(xué)和進(jìn)階中的小伙伴 |
|
來(lái)自: xxcc140 > 《電腦與網(wǎng)絡(luò)》