




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十六講第十六講 文件文件文件的概念文件的概念文件指針文件指針文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉文件的讀寫(xiě)文件的讀寫(xiě)文件的定位文件的定位程序設(shè)計(jì)舉例程序設(shè)計(jì)舉例C C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)簡(jiǎn)介簡(jiǎn)介文件文件存儲(chǔ)在外存儲(chǔ)器上的數(shù)據(jù)集合。存儲(chǔ)在外存儲(chǔ)器上的數(shù)據(jù)集合。文件文件內(nèi)存內(nèi)存硬盤(pán)硬盤(pán)寫(xiě)寫(xiě)讀讀保存在變量和數(shù)組保存在變量和數(shù)組中的數(shù)據(jù)是暫時(shí)的中的數(shù)據(jù)是暫時(shí)的大量的數(shù)據(jù)保存到大量的數(shù)據(jù)保存到文件實(shí)現(xiàn)永久存儲(chǔ)文件實(shí)現(xiàn)永久存儲(chǔ)簡(jiǎn)介簡(jiǎn)介數(shù)據(jù)的層次結(jié)構(gòu)數(shù)據(jù)的層次結(jié)構(gòu)文件文件001000111001001111010110011011100100100100111101101011101001011WangH
2、ai21M788983LiFei21F768885ZhaoXin21M818679010111001文件文件字段字段字節(jié)字節(jié)位位記錄記錄簡(jiǎn)介簡(jiǎn)介C語(yǔ)言的文件處理語(yǔ)言的文件處理C語(yǔ)言把文件看作是一個(gè)有序的字節(jié)或字符流。語(yǔ)言把文件看作是一個(gè)有序的字節(jié)或字符流。文件文件簡(jiǎn)介簡(jiǎn)介文件的分類文件的分類(按存儲(chǔ)形式分)(按存儲(chǔ)形式分)文本文件文本文件數(shù)據(jù)被作為字符,并以字符的二進(jìn)制編碼形式保存。數(shù)據(jù)被作為字符,并以字符的二進(jìn)制編碼形式保存。舉例舉例文件文件12341 2 3 4整數(shù)整數(shù)把把4個(gè)字符的二進(jìn)制編碼寫(xiě)入文件中個(gè)字符的二進(jìn)制編碼寫(xiě)入文件中00110001 00110010 00110011 001
3、10100簡(jiǎn)介簡(jiǎn)介文件的分類文件的分類(按存儲(chǔ)形式分)(按存儲(chǔ)形式分)二進(jìn)制文件二進(jìn)制文件以數(shù)據(jù)在內(nèi)存中的二進(jìn)制形式保存。以數(shù)據(jù)在內(nèi)存中的二進(jìn)制形式保存。舉例舉例文件文件1234整數(shù)整數(shù)00000100 11010010把值把值1234的二進(jìn)制編碼寫(xiě)入文件中的二進(jìn)制編碼寫(xiě)入文件中簡(jiǎn)介簡(jiǎn)介文件的讀寫(xiě)文件的讀寫(xiě)緩沖文件系統(tǒng)緩沖文件系統(tǒng)系統(tǒng)在內(nèi)存中開(kāi)辟一塊緩沖區(qū)以便慢速的外設(shè)與其成塊地進(jìn)行數(shù)據(jù)系統(tǒng)在內(nèi)存中開(kāi)辟一塊緩沖區(qū)以便慢速的外設(shè)與其成塊地進(jìn)行數(shù)據(jù)交換。交換。向磁盤(pán)向磁盤(pán)(文件文件)輸出數(shù)據(jù):輸出數(shù)據(jù):數(shù)據(jù)數(shù)據(jù)緩沖區(qū),裝滿緩沖區(qū)后緩沖區(qū),裝滿緩沖區(qū)后磁盤(pán)文件。磁盤(pán)文件。從磁盤(pán)從磁盤(pán)(文件文件)讀入
4、數(shù)據(jù):讀入數(shù)據(jù): 先一次性從磁盤(pán)文件將一批數(shù)據(jù)輸入到緩沖區(qū),先一次性從磁盤(pán)文件將一批數(shù)據(jù)輸入到緩沖區(qū), 然后再?gòu)木彌_區(qū)逐個(gè)數(shù)據(jù)讀入到變量。然后再?gòu)木彌_區(qū)逐個(gè)數(shù)據(jù)讀入到變量。文件文件文件指針文件指針文件指針文件指針(指向文件的指針)(指向文件的指針)緩沖文件系統(tǒng)為每個(gè)使用的文件在內(nèi)存中開(kāi)辟一存儲(chǔ)區(qū)存緩沖文件系統(tǒng)為每個(gè)使用的文件在內(nèi)存中開(kāi)辟一存儲(chǔ)區(qū)存放其相關(guān)信息,這些信息用一個(gè)結(jié)構(gòu)體變量保存,該放其相關(guān)信息,這些信息用一個(gè)結(jié)構(gòu)體變量保存,該結(jié)構(gòu)結(jié)構(gòu)體類型體類型的名字是的名字是 FILE。 程序通過(guò)程序通過(guò) FILE類型指針建立和文件的聯(lián)系,進(jìn)行關(guān)于文件類型指針建立和文件的聯(lián)系,進(jìn)行關(guān)于文件的一切操
5、作。的一切操作。定義形式:定義形式:FILE *指針變量名指針變量名; 舉例:舉例:定義了一個(gè)結(jié)構(gòu)體定義了一個(gè)結(jié)構(gòu)體FILE類型的指針變量:類型的指針變量:fp。文件文件用于存放文件的緩沖區(qū)首地用于存放文件的緩沖區(qū)首地址,即指向一個(gè)文件。址,即指向一個(gè)文件。FILE *fp;文件的打開(kāi)文件的打開(kāi)打開(kāi)文件打開(kāi)文件方法:方法:為了打開(kāi)一個(gè)文件,首先要為該文件定義一個(gè)文件類型指針;為了打開(kāi)一個(gè)文件,首先要為該文件定義一個(gè)文件類型指針;然后用然后用C語(yǔ)言提供的語(yǔ)言提供的fopen()函數(shù)函數(shù)打開(kāi)文件。打開(kāi)文件。fopen函數(shù)有兩個(gè)參數(shù):函數(shù)有兩個(gè)參數(shù): “文件名文件名”與與“文件使用方式文件使用方式”
6、。 它們均是字符串。它們均是字符串。一般形式:一般形式:文件文件FILE *文件指針名文件指針名;文件指針名文件指針名fopen(文件名文件名,文件使用方式文件使用方式); 文件的打開(kāi)文件的打開(kāi)打開(kāi)文件打開(kāi)文件文件使用方式文件使用方式文件文件符號(hào)符號(hào)意義意義r(read)以只讀方式打開(kāi)一個(gè)文本文件,若文件不存在,則返回空指針以只讀方式打開(kāi)一個(gè)文本文件,若文件不存在,則返回空指針w(write)以只寫(xiě)方式打開(kāi)或創(chuàng)建一個(gè)文本文件,并覆蓋原有數(shù)據(jù)以只寫(xiě)方式打開(kāi)或創(chuàng)建一個(gè)文本文件,并覆蓋原有數(shù)據(jù)a(append)以追加方式打開(kāi)或創(chuàng)建一個(gè)文本文件,并從文件末尾寫(xiě)數(shù)據(jù)以追加方式打開(kāi)或創(chuàng)建一個(gè)文本文件,并從
7、文件末尾寫(xiě)數(shù)據(jù)t(text)文本文件,可省略不寫(xiě)文本文件,可省略不寫(xiě)b(binary)二進(jìn)制文件二進(jìn)制文件+讀和寫(xiě)讀和寫(xiě)文件的打開(kāi)文件的打開(kāi)打開(kāi)文件打開(kāi)文件舉例舉例其意義是在當(dāng)前目錄下打開(kāi)文件其意義是在當(dāng)前目錄下打開(kāi)文件filea.dat,文件的使用方式為,文件的使用方式為“只只讀讀”,并使,并使fp指向該文件。指向該文件。 舉例舉例其意義是打開(kāi)其意義是打開(kāi)c盤(pán)根目錄下的文件盤(pán)根目錄下的文件fileabc.dat,這是一個(gè)二進(jìn)制文,這是一個(gè)二進(jìn)制文件,只允許按二進(jìn)制方式進(jìn)行讀操作。件,只允許按二進(jìn)制方式進(jìn)行讀操作。兩個(gè)反斜線兩個(gè)反斜線“”中的第一個(gè)表示轉(zhuǎn)義字符,第二個(gè)表示根目錄。中的第一個(gè)表示
8、轉(zhuǎn)義字符,第二個(gè)表示根目錄。文件文件FILE *fp;fp = fopen(filea.dat, r); FILE *fpabc;fpabc = fopen(“c:fileabc.dat, rb); 文件的關(guān)閉文件的關(guān)閉關(guān)閉文件關(guān)閉文件使用使用fclose()函數(shù)。函數(shù)。一般形式:一般形式:fclose(文件指針文件指針);舉例舉例將將fp指向的緩沖區(qū)中的數(shù)據(jù)存放到外存儲(chǔ)器的文件中,然后釋放該指向的緩沖區(qū)中的數(shù)據(jù)存放到外存儲(chǔ)器的文件中,然后釋放該緩沖區(qū),使文件指針變量不再指向與該文件對(duì)應(yīng)的緩沖區(qū),使文件指針變量不再指向與該文件對(duì)應(yīng)的FILE結(jié)構(gòu),從而結(jié)構(gòu),從而斷開(kāi)與文件的關(guān)聯(lián)。斷開(kāi)與文件的關(guān)聯(lián)
9、。操作正常返回操作正常返回0,否則返回,否則返回EOF(是在(是在stdio.h文件中定義的符號(hào)常文件中定義的符號(hào)常量,值為量,值為-1)。)。文件文件FILE *fp;fclose(fp); 如果不關(guān)閉文件,將會(huì)丟失數(shù)據(jù),并如果不關(guān)閉文件,將會(huì)丟失數(shù)據(jù),并且一個(gè)且一個(gè)C程序能同時(shí)打開(kāi)的文件數(shù)有限,程序能同時(shí)打開(kāi)的文件數(shù)有限,應(yīng)該養(yǎng)成在使用完文件后關(guān)閉文件的應(yīng)該養(yǎng)成在使用完文件后關(guān)閉文件的習(xí)慣。習(xí)慣。文件操作文件操作文件操作的一般步驟文件操作的一般步驟文件文件/* 定義聲明文件指針定義聲明文件指針 */FILE *fp;/* 打開(kāi)文件打開(kāi)文件 */fp = fopen(文件名文件名, r);
10、/* 判斷是否打開(kāi)文件判斷是否打開(kāi)文件 */if (fp = NULL) /* 當(dāng)文件打開(kāi)失敗時(shí)的處理當(dāng)文件打開(kāi)失敗時(shí)的處理 */ /* 對(duì)文件進(jìn)行讀寫(xiě)操作對(duì)文件進(jìn)行讀寫(xiě)操作 */ /* 關(guān)閉文件關(guān)閉文件 */fclose(fp);文件的讀寫(xiě)文件的讀寫(xiě)C語(yǔ)言支持兩種讀寫(xiě)文件的方式語(yǔ)言支持兩種讀寫(xiě)文件的方式順序讀寫(xiě)順序讀寫(xiě)從文件中一個(gè)接一個(gè)地讀寫(xiě)數(shù)據(jù),僅當(dāng)讀寫(xiě)了前一個(gè)數(shù)據(jù)后,才能從文件中一個(gè)接一個(gè)地讀寫(xiě)數(shù)據(jù),僅當(dāng)讀寫(xiě)了前一個(gè)數(shù)據(jù)后,才能讀寫(xiě)下一個(gè)數(shù)據(jù)。讀寫(xiě)下一個(gè)數(shù)據(jù)。在讀寫(xiě)數(shù)據(jù)后,文件位置指針自動(dòng)跳到下一個(gè)讀寫(xiě)位置。在讀寫(xiě)數(shù)據(jù)后,文件位置指針自動(dòng)跳到下一個(gè)讀寫(xiě)位置。標(biāo)準(zhǔn)輸入輸出只能進(jìn)行順序讀寫(xiě)。
11、標(biāo)準(zhǔn)輸入輸出只能進(jìn)行順序讀寫(xiě)。隨機(jī)讀寫(xiě)隨機(jī)讀寫(xiě)從文件中讀寫(xiě)數(shù)據(jù)時(shí)可不考慮數(shù)據(jù)在文件中的位置,可以在文件的從文件中讀寫(xiě)數(shù)據(jù)時(shí)可不考慮數(shù)據(jù)在文件中的位置,可以在文件的任何位置讀寫(xiě)。任何位置讀寫(xiě)。在讀寫(xiě)數(shù)據(jù)前,需要將在讀寫(xiě)數(shù)據(jù)前,需要將文件位置指針文件位置指針移到讀寫(xiě)位置。移到讀寫(xiě)位置。當(dāng)文件以讀或?qū)懛绞酱蜷_(kāi),文件位置指針設(shè)置在文件頭,若文件以當(dāng)文件以讀或?qū)懛绞酱蜷_(kāi),文件位置指針設(shè)置在文件頭,若文件以附加方式打開(kāi),位置設(shè)置在文件末尾。附加方式打開(kāi),位置設(shè)置在文件末尾。文件文件字符的讀寫(xiě)字符的讀寫(xiě)讀字符讀字符fgetc()函數(shù)函數(shù)從指定文件讀入一個(gè)字符,該文件必須是以讀或讀寫(xiě)方式打開(kāi)。從指定文件讀入一
12、個(gè)字符,該文件必須是以讀或讀寫(xiě)方式打開(kāi)。返回值:返回值: 調(diào)用成功時(shí)返回讀入的字符;調(diào)用成功時(shí)返回讀入的字符; 文件結(jié)束時(shí)返回文件結(jié)束符文件結(jié)束時(shí)返回文件結(jié)束符EOF。舉例舉例 表示從文件指針變量表示從文件指針變量fp指向的文件中讀出一個(gè)字符,賦給字符變量指向的文件中讀出一個(gè)字符,賦給字符變量ch文件文件ch = fgetc(fp);字符的讀寫(xiě)字符的讀寫(xiě)文件位置指針文件位置指針文件型數(shù)據(jù)結(jié)構(gòu)中,用文件位置指針指向當(dāng)前對(duì)文件進(jìn)行文件型數(shù)據(jù)結(jié)構(gòu)中,用文件位置指針指向當(dāng)前對(duì)文件進(jìn)行讀寫(xiě)操作的位置。讀寫(xiě)操作的位置。在文件打開(kāi)時(shí),該指針總是指向文件的第一個(gè)字節(jié)。讀寫(xiě)文件時(shí),在文件打開(kāi)時(shí),該指針總是指向文
13、件的第一個(gè)字節(jié)。讀寫(xiě)文件時(shí),每讀寫(xiě)一個(gè)字符后,該位置指針的值會(huì)自動(dòng)加每讀寫(xiě)一個(gè)字符后,該位置指針的值會(huì)自動(dòng)加1,指向下一個(gè)字符。,指向下一個(gè)字符。改變位置指針的值,也就改變了下一次讀寫(xiě)操作在文件中執(zhí)行時(shí)的改變位置指針的值,也就改變了下一次讀寫(xiě)操作在文件中執(zhí)行時(shí)的位置。位置。文件文件文件位置指針文件位置指針字符的讀寫(xiě)字符的讀寫(xiě)文件結(jié)束文件結(jié)束問(wèn)題問(wèn)題使用使用fgetc()函數(shù),文件結(jié)束時(shí)返回文件結(jié)束符函數(shù),文件結(jié)束時(shí)返回文件結(jié)束符EOF,其值為,其值為-1。這。這在對(duì)文本文件操作時(shí)不會(huì)產(chǎn)生問(wèn)題。但對(duì)二進(jìn)制文件進(jìn)行讀操作時(shí),在對(duì)文本文件操作時(shí)不會(huì)產(chǎn)生問(wèn)題。但對(duì)二進(jìn)制文件進(jìn)行讀操作時(shí),由于由于-1是
14、二進(jìn)制數(shù)的合法值,故將影響文件數(shù)據(jù)的讀取。是二進(jìn)制數(shù)的合法值,故將影響文件數(shù)據(jù)的讀取。為解決此問(wèn)題,為解決此問(wèn)題,ANSI C提供了專門判斷文件結(jié)束的函數(shù)提供了專門判斷文件結(jié)束的函數(shù)feof()。feof()函數(shù)函數(shù)feof(文件指針文件指針);判斷文件位置指針是否已至文件尾判斷文件位置指針是否已至文件尾 返回值:返回值: 函數(shù)返回值為函數(shù)返回值為1時(shí)表示已至文件尾部;時(shí)表示已至文件尾部; 為為0時(shí)則還未到文件結(jié)束處。時(shí)則還未到文件結(jié)束處。文件文件字符的讀寫(xiě)字符的讀寫(xiě)寫(xiě)字符寫(xiě)字符fputc()函數(shù)函數(shù)fputc(字符量,文件指針字符量,文件指針); 將一個(gè)字符寫(xiě)到磁盤(pán)文件上去將一個(gè)字符寫(xiě)到磁盤(pán)
15、文件上去返回值:返回值: 調(diào)用成功時(shí)返回輸出的字符;調(diào)用成功時(shí)返回輸出的字符; 失敗時(shí)返回失敗時(shí)返回EOF。舉例舉例 表示向文件指針變量表示向文件指針變量fp指向的文件寫(xiě)入一個(gè)字符指向的文件寫(xiě)入一個(gè)字符a。文件文件fputc(a, fp);案例分析:字符的讀寫(xiě)案例分析:字符的讀寫(xiě)問(wèn)題問(wèn)題打開(kāi)打開(kāi)“c:infile.c”文件,然后將其復(fù)制到文件,然后將其復(fù)制到“c:outfile.c”。源代碼源代碼文件文件#include stdio.h#include stdlib.hvoid main() FILE *infp,*outfp; char ch; if (infp = fopen(c:infi
16、le.c, r) = NULL) printf(Cannot open infile.c.n); exit(0); 案例分析:字符的讀寫(xiě)案例分析:字符的讀寫(xiě)源代碼源代碼文件文件 if (outfp = fopen(c:outfile.c, w) = NULL) printf(Cannot open outfile.c.n); exit(0); while(!feof(infp) if (ch = fgetc(infp) != EOF) fputc(ch,outfp); fclose(infp); fclose(outfp); 字符串的讀寫(xiě)字符串的讀寫(xiě)讀字符串讀字符串fgets()函數(shù)函數(shù)fge
17、ts(字符數(shù)組名字符數(shù)組名, n, 文件指針文件指針); 從指定文件讀入從指定文件讀入n-1個(gè)字符到字符數(shù)組,最后加一個(gè)個(gè)字符到字符數(shù)組,最后加一個(gè)0結(jié)束符。結(jié)束符。在讀完在讀完n-1個(gè)字符之前遇到換行符或文件結(jié)束符個(gè)字符之前遇到換行符或文件結(jié)束符EOF,讀入即結(jié)束。,讀入即結(jié)束。返回值:字符數(shù)組的地址。返回值:字符數(shù)組的地址。舉例舉例 從從fp所指的文件中讀出所指的文件中讀出n-1個(gè)字符送入字符數(shù)組個(gè)字符送入字符數(shù)組str中。中。文件文件fgets(str, n, fp);字符串的讀寫(xiě)字符串的讀寫(xiě)寫(xiě)字符串寫(xiě)字符串fputs()函數(shù)函數(shù)fputs(字符數(shù)組名字符數(shù)組名, 文件指針文件指針);
18、向指定的文件輸出一個(gè)字符串,向指定的文件輸出一個(gè)字符串,0結(jié)束符不輸出。其中字符串結(jié)束符不輸出。其中字符串可以是字符串常量、字符數(shù)組名或指針變量??梢允亲址A俊⒆址麛?shù)組名或指針變量。返回值:返回值: 調(diào)用成功時(shí),返回調(diào)用成功時(shí),返回0; 否則返回否則返回EOF。舉例舉例 其意義是把字符串其意義是把字符串“abcd”寫(xiě)入寫(xiě)入fp所指的文件之中。所指的文件之中。文件文件fputs(“abcd”, fp);案例分析:字符串的讀寫(xiě)案例分析:字符串的讀寫(xiě)問(wèn)題問(wèn)題從鍵盤(pán)上輸入一串字符,寫(xiě)入文本文件從鍵盤(pán)上輸入一串字符,寫(xiě)入文本文件“abc.c”中,再將中,再將文本文件的內(nèi)容讀出,顯示在屏幕上。文本文件
19、的內(nèi)容讀出,顯示在屏幕上。源代碼源代碼文件文件#include stdio.h#include stdlib.hvoid main() FILE *fp; char str100, ch; if(fp = fopen(c:abc.c, w) = NULL) printf(file open error.n); exit(0);案例分析:字符串的讀寫(xiě)案例分析:字符串的讀寫(xiě)源代碼源代碼文件文件printf(請(qǐng)輸入一串字符:請(qǐng)輸入一串字符:n);gets(str);fputs(str,fp);fclose(fp); if(fp=fopen(c:abc.c, r) = NULL) printf(fil
20、e open error.n); exit(0);while(!feof(fp) if (ch = fgetc(fp) != EOF) putchar(ch);fclose(fp); 格式化讀寫(xiě)格式化讀寫(xiě)格式化讀格式化讀fscanf()函數(shù)函數(shù)fscanf(文件指針文件指針, ”格式控制字符串格式控制字符串”, 地址表列地址表列); 從指定的文件中格式化讀數(shù)據(jù)。從指定的文件中格式化讀數(shù)據(jù)。這個(gè)函數(shù)與格式輸入函數(shù)這個(gè)函數(shù)與格式輸入函數(shù)scanf( )很相似,它們的區(qū)別在于,很相似,它們的區(qū)別在于,scanf( )函數(shù)是從鍵盤(pán)輸入數(shù)據(jù),而函數(shù)是從鍵盤(pán)輸入數(shù)據(jù),而fscanf( )函數(shù)是從文件讀入數(shù)
21、函數(shù)是從文件讀入數(shù)據(jù),因此在據(jù),因此在fscanf( )函數(shù)參數(shù)中多了一個(gè)文件指針,用于指出從哪函數(shù)參數(shù)中多了一個(gè)文件指針,用于指出從哪個(gè)文件讀入數(shù)據(jù)。個(gè)文件讀入數(shù)據(jù)。舉例舉例 表示從磁盤(pán)文件中的讀取一個(gè)浮點(diǎn)數(shù)和一個(gè)整數(shù),分別存入變量表示從磁盤(pán)文件中的讀取一個(gè)浮點(diǎn)數(shù)和一個(gè)整數(shù),分別存入變量f和和d。文件文件fscanf(fp, “%f%d”, &f, &d);格式化讀寫(xiě)格式化讀寫(xiě)格式化寫(xiě)格式化寫(xiě)fprintf()函數(shù)函數(shù)fprintf(文件指針文件指針, ”格式控制字符串格式控制字符串”, 輸出表列輸出表列); 格式化寫(xiě)數(shù)據(jù)到指定的文件中。格式化寫(xiě)數(shù)據(jù)到指定的文件中。這個(gè)函數(shù)與
22、這個(gè)函數(shù)與printf( )函數(shù)很相似,它們的區(qū)別在于,函數(shù)很相似,它們的區(qū)別在于,printf()函數(shù)是函數(shù)是將數(shù)據(jù)輸出到屏幕上,而將數(shù)據(jù)輸出到屏幕上,而fprintf()函數(shù)是將數(shù)據(jù)輸出到文件中,因函數(shù)是將數(shù)據(jù)輸出到文件中,因此在此在fprintf()函數(shù)參數(shù)中多了一個(gè)文件指針,用于指出將數(shù)據(jù)輸出函數(shù)參數(shù)中多了一個(gè)文件指針,用于指出將數(shù)據(jù)輸出到哪個(gè)文件中。到哪個(gè)文件中。舉例舉例 表示把變量表示把變量f和和d按指定的格式寫(xiě)入磁盤(pán)文件。按指定的格式寫(xiě)入磁盤(pán)文件。文件文件fprintf(fp, “f=%f, d=%dn”, f, d);數(shù)據(jù)塊的讀寫(xiě)數(shù)據(jù)塊的讀寫(xiě)以數(shù)據(jù)塊方式讀寫(xiě)文件以數(shù)據(jù)塊方式讀寫(xiě)
23、文件fscanf()函數(shù)和函數(shù)和fprintf()函數(shù)對(duì)磁盤(pán)文件讀寫(xiě),使用方便,函數(shù)對(duì)磁盤(pán)文件讀寫(xiě),使用方便,易理解。但輸入輸出需要轉(zhuǎn)化。易理解。但輸入輸出需要轉(zhuǎn)化。因此,在內(nèi)存與磁盤(pán)頻繁交換數(shù)據(jù)的情況下,最好用因此,在內(nèi)存與磁盤(pán)頻繁交換數(shù)據(jù)的情況下,最好用fread()和和fwrite()函數(shù)。函數(shù)。fread(內(nèi)存地址內(nèi)存地址,數(shù)據(jù)項(xiàng)字節(jié)數(shù)數(shù)據(jù)項(xiàng)字節(jié)數(shù),數(shù)據(jù)項(xiàng)個(gè)數(shù)數(shù)據(jù)項(xiàng)個(gè)數(shù),文件指針文件指針);fwrite(內(nèi)存地址內(nèi)存地址,數(shù)據(jù)項(xiàng)字節(jié)數(shù)數(shù)據(jù)項(xiàng)字節(jié)數(shù),數(shù)據(jù)項(xiàng)個(gè)數(shù)數(shù)據(jù)項(xiàng)個(gè)數(shù),文件指針文件指針);通常用于對(duì)二進(jìn)制文件的讀寫(xiě)操作。通常用于對(duì)二進(jìn)制文件的讀寫(xiě)操作。舉例舉例 表示從已打開(kāi)的一個(gè)文件中
24、讀入表示從已打開(kāi)的一個(gè)文件中讀入5個(gè)整數(shù),依次送入整型數(shù)組個(gè)整數(shù),依次送入整型數(shù)組a中。中。文件文件int a5;fread(a, sizeof(int), 5, fp);文件的隨機(jī)讀寫(xiě)文件的隨機(jī)讀寫(xiě)文件內(nèi)部的位置文件內(nèi)部的位置按要求移動(dòng)位置指針,是實(shí)現(xiàn)隨機(jī)讀寫(xiě)的關(guān)鍵。按要求移動(dòng)位置指針,是實(shí)現(xiàn)隨機(jī)讀寫(xiě)的關(guān)鍵。rewind()函數(shù)函數(shù)rewind(文件指針文件指針);使位置指針重新返回到文件的開(kāi)頭,函數(shù)無(wú)返回值。使位置指針重新返回到文件的開(kāi)頭,函數(shù)無(wú)返回值。ftell()函數(shù)函數(shù)ftell();得到當(dāng)前文件指針位置。得到當(dāng)前文件指針位置。返回值:返回值: 調(diào)用成功時(shí),返回調(diào)用成功時(shí),返回lon
25、g int 數(shù)值,表示文件指針位置;數(shù)值,表示文件指針位置; 出錯(cuò)返回出錯(cuò)返回-1L。文件文件文件的隨機(jī)讀寫(xiě)文件的隨機(jī)讀寫(xiě)文件內(nèi)部的位置文件內(nèi)部的位置fseek()函數(shù)函數(shù)rewind(文件指針文件指針, 位移量位移量, 起始點(diǎn)起始點(diǎn));改變文件的位置指針。改變文件的位置指針。其中,其中, 文件指針:是文件打開(kāi)時(shí)返回的文件指針。文件指針:是文件打開(kāi)時(shí)返回的文件指針。 位移量:是指以起始點(diǎn)為基點(diǎn),向前向后移動(dòng)的字節(jié)數(shù),可以為負(fù)值。位移量:是指以起始點(diǎn)為基點(diǎn),向前向后移動(dòng)的字節(jié)數(shù),可以為負(fù)值。大多數(shù)大多數(shù)C語(yǔ)言版本要求位移量為語(yǔ)言版本要求位移量為long型數(shù)。型數(shù)。 起始點(diǎn):表示從何處開(kāi)始計(jì)算位移
26、量,規(guī)定的起始點(diǎn)有:起始點(diǎn):表示從何處開(kāi)始計(jì)算位移量,規(guī)定的起始點(diǎn)有:返回值:操作成功返回返回值:操作成功返回0,否則返回非,否則返回非0。文件文件起始點(diǎn)起始點(diǎn)名字名字?jǐn)?shù)字代號(hào)數(shù)字代號(hào)文件開(kāi)始文件開(kāi)始SEEK_SET SEEK_SET 0 0 當(dāng)前位置當(dāng)前位置SEEK_CURSEEK_CUR1 1文件末尾文件末尾SEEK_ENDSEEK_END2 2案例分析:文件的隨機(jī)讀寫(xiě)案例分析:文件的隨機(jī)讀寫(xiě)問(wèn)題問(wèn)題設(shè)文件設(shè)文件“alphabet.c”中存放了字母表中存放了字母表“AZ”,現(xiàn)在打開(kāi),現(xiàn)在打開(kāi)這個(gè)文件,用從尾部倒著讀的方式將其信息讀出并送屏幕這個(gè)文件,用從尾部倒著讀的方式將其信息讀出并送屏幕顯示。顯示。源代碼源代碼文件文件#include #include void main() FILE *fp; long i; if(fp=fopen(“c:alphabet.c”, “rb”)= NULL) printf(“file open error.n”); exit(0); 案例分析:文件的隨機(jī)讀寫(xiě)案例分析:文件的隨機(jī)讀寫(xiě)源代碼源代碼文件文件 for(i=1;i=26;i+) fseek(fp,-i,SEEK_END); /* i=1時(shí),定位于字母時(shí),定位于字母Z *
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鞋類設(shè)計(jì)師(功能鞋方向)崗位面試問(wèn)題及答案
- 2025屆廣東梅州第一中學(xué)高一下化學(xué)期末統(tǒng)考試題含解析
- 云南省文山馬關(guān)實(shí)驗(yàn)高級(jí)中學(xué)2025屆高二化學(xué)第二學(xué)期期末質(zhì)量檢測(cè)試題含解析
- 甘肅省白銀市會(huì)寧縣2025屆高一化學(xué)第二學(xué)期期末達(dá)標(biāo)檢測(cè)模擬試題含解析
- 揚(yáng)州市揚(yáng)州中學(xué)2025屆化學(xué)高二下期末考試試題含解析
- 安徽省黃山市屯溪區(qū)第二中學(xué)2025屆高二下化學(xué)期末調(diào)研試題含解析
- 根據(jù)旅游管理暫行辦法
- 供應(yīng)商標(biāo)簽化管理辦法
- 遺產(chǎn)旅游中的記憶政治研究-洞察及研究
- 生物相容性傳感網(wǎng)絡(luò)-洞察及研究
- 2025年大學(xué)英語(yǔ)四級(jí)考試題及答案
- 隨州市城市規(guī)劃管理技術(shù)規(guī)定
- 綠色食品高粱生產(chǎn)技術(shù)操作規(guī)程
- 機(jī)械原理課程設(shè)計(jì)說(shuō)明書(shū)精壓機(jī)
- 三年級(jí)除法豎式謎
- 口腔修復(fù)學(xué)-全口義齒修復(fù)課件
- 抖音快閃自我介紹(含背景音樂(lè))
- 中國(guó)南方人才市場(chǎng)辦事指引
- 3、焊縫(焊道、焊口)寬度計(jì)算公式
- 天車工考試考試試題
- 抗體藥物中試項(xiàng)目可行性研究報(bào)告寫(xiě)作范文
評(píng)論
0/150
提交評(píng)論