




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Hefei University of Technology 第九章第九章 文文 件件 Hefei University of Technology 9.1 概述概述 文件概念:文件概念:文件是一組存儲在外部設(shè)備上的數(shù)據(jù)的集合。外設(shè)文件是一組存儲在外部設(shè)備上的數(shù)據(jù)的集合。外設(shè) (如鍵盤)也可以以文件的形式進(jìn)行處理,稱為(如鍵盤)也可以以文件的形式進(jìn)行處理,稱為設(shè)備文件。設(shè)備文件。 文件的優(yōu)點(diǎn):文件的優(yōu)點(diǎn): v保存和交換數(shù)據(jù)。保存和交換數(shù)據(jù)。 v保存大容量數(shù)據(jù)。保存大容量數(shù)據(jù)。 文件的分類:文件的分類: 數(shù)據(jù)表示方式:數(shù)據(jù)表示方式: v二進(jìn)制文件。二進(jìn)制文件。 v文本文件文本文件(ASCII)文
2、件。文件。 讀寫方式:讀寫方式: 順序讀寫文件(流式)。順序讀寫文件(流式)。 隨機(jī)讀寫文件。隨機(jī)讀寫文件。 處理方法處理方法:q緩沖文件。緩沖文件。 q非緩沖文件。非緩沖文件。 Device 內(nèi)內(nèi) 存存 Buffer 匹配主機(jī)速度,數(shù)據(jù)轉(zhuǎn)換。匹配主機(jī)速度,數(shù)據(jù)轉(zhuǎn)換。 Hefei University of Technology 9.2 文件類型指針文件類型指針 文件的操作過程文件的操作過程 打開文件打開文件 建立一個文件和流的對應(yīng)關(guān)系。在內(nèi)建立一個文件和流的對應(yīng)關(guān)系。在內(nèi) 存中建立一個保存文件信息的結(jié)構(gòu)變量。存中建立一個保存文件信息的結(jié)構(gòu)變量。 讀寫文件讀寫文件 關(guān)閉文件關(guān)閉文件釋放文件所占
3、的資源。釋放文件所占的資源。 文件類型指針文件類型指針 在緩沖文件系統(tǒng)中,每個被使用的文件的信息在緩沖文件系統(tǒng)中,每個被使用的文件的信息(如文件名、位(如文件名、位 置、類型等)置、類型等)都保存在一個特殊定義的都保存在一個特殊定義的結(jié)構(gòu)類型的變量中結(jié)構(gòu)類型的變量中。該結(jié)構(gòu)。該結(jié)構(gòu) 用戶定義名為:用戶定義名為:FILE 可以定義一個指向可以定義一個指向FILE類型的結(jié)構(gòu)指針,打開文件是讓該指針類型的結(jié)構(gòu)指針,打開文件是讓該指針 指向文件對應(yīng)的結(jié)構(gòu)變量,通過該指針對文件進(jìn)行操作。指向文件對應(yīng)的結(jié)構(gòu)變量,通過該指針對文件進(jìn)行操作。 FILE *fp; Hefei University of Tec
4、hnology 9.3 文件的打開與關(guān)閉文件的打開與關(guān)閉 文件的打開文件的打開 fopen( )函數(shù)函數(shù) fopen函數(shù)的原型在函數(shù)的原型在stdio.h文件中說明,該函數(shù)的作用是打開文件中說明,該函數(shù)的作用是打開 緩沖文件。緩沖文件。 使用方法:使用方法: FILE *fp ; fp = fopen( filename , mode ) ; 打開文件的文件名或設(shè)備名。打開文件的文件名或設(shè)備名。 文件的讀寫方式。文件的讀寫方式。 文件信息結(jié)構(gòu)的指針。文件信息結(jié)構(gòu)的指針。 fp=fopen(“a:wang.dat”,”w+”); 說明:說明: 如果如果fopen失敗,則函數(shù)返回空指針失敗,則函數(shù)
5、返回空指針NULL; 當(dāng)文件打開錯誤時,程序不應(yīng)繼續(xù)執(zhí)行,一般以如下方式打當(dāng)文件打開錯誤時,程序不應(yīng)繼續(xù)執(zhí)行,一般以如下方式打 開文件:開文件: if ( fp=fopen( filename , mode ) =NULL ) printf ( “File Open Error! n” ) ;exit (1) ; Hefei University of Technology 文件的讀寫方式說明:文件的讀寫方式說明: 控制符控制符文件類型文件類型讀寫方式讀寫方式 “rb” 二進(jìn)制 打開文件只讀 “wb”打開文件只寫 “ab”打開文件在尾部追加 “rb+” 二進(jìn)制 打開文件可讀寫 “wb+”建立新
6、文件可讀寫 “ab+”打開文件可讀寫 Hefei University of Technology 文件的關(guān)閉文件的關(guān)閉 fclose函數(shù)函數(shù) 文件使用完必須關(guān)閉,關(guān)閉文件的目的是:文件使用完必須關(guān)閉,關(guān)閉文件的目的是: v保證文件的數(shù)據(jù)不丟失,將保證文件的數(shù)據(jù)不丟失,將buffer的數(shù)據(jù)回寫文件。的數(shù)據(jù)回寫文件。 v釋放釋放buffer。 關(guān)閉文件函數(shù)的使用:關(guān)閉文件函數(shù)的使用: fclose(文件指針文件指針); FILE *fp; fp=fopen(“a:d.dat”,”w+”); /* 文件的讀寫文件的讀寫 */ fclose(fp); 說明:說明: 如果關(guān)閉正確如果關(guān)閉正確fclos
7、e返回返回0;關(guān)閉失敗;關(guān)閉失敗fclose 返回非返回非0。 Hefei University of Technology 文件讀寫的方式 文件按讀寫方式可以分為:文件按讀寫方式可以分為: v順序讀寫順序讀寫 v隨機(jī)讀寫隨機(jī)讀寫 順序讀寫:順序向后讀寫。順序讀寫:順序向后讀寫。 隨機(jī)讀寫:給定位置讀寫。隨機(jī)讀寫:給定位置讀寫。 Hefei University of Technology 9.4 文件的讀文件的讀/寫寫 文件的讀寫是由定義在文件的讀寫是由定義在stdio.h中的一組函數(shù)的集合所實(shí)現(xiàn)的。中的一組函數(shù)的集合所實(shí)現(xiàn)的。 fputc函數(shù)和函數(shù)和fgetc函數(shù)函數(shù) fputc函數(shù)函數(shù)
8、使用方法:使用方法: fputc (ch , fp ) ; 含含 義:義:將字符將字符ch寫入文件指針對應(yīng)的文件的當(dāng)前位置。寫入文件指針對應(yīng)的文件的當(dāng)前位置。 返回值:返回值:寫入正確返回寫入正確返回ch的值;的值;失敗返回失敗返回EOF( 在在stdio.h中定中定 義為義為-1)。 fgetc函數(shù)函數(shù) 使用方法:使用方法: ch = fgetc ( fp ) ; /*ch為字符型變量。為字符型變量。*/ 含義:含義:從文件指針從文件指針fp對應(yīng)的可讀文件的當(dāng)前位置讀一個字符返對應(yīng)的可讀文件的當(dāng)前位置讀一個字符返 回賦值給回賦值給ch。 feof 函數(shù)函數(shù) 使用方法:使用方法:i=feof
9、(fp) ; 含含 義:判斷文件是否結(jié)束。義:判斷文件是否結(jié)束。 返回值:返回值:1代表文件結(jié)束;代表文件結(jié)束; 0代表文件未結(jié)束。代表文件未結(jié)束。 Hefei University of Technology #include void main ( int argc,char *argv ) FILE *in , *out ; if(argc!=3)printf(“Command format error!n”);exit(0); if ( in=fopen ( argv1 , “r” ) = NULL ) printf (“cannot open the infile n ”) ; ex
10、it (0) ; if ( ( out = fopen (argv2 , “w” ) = NULL ) printf (“cannot open the outfile n”) ; exit (0) ; while ( !feof (in) fputc (fgetc(in) , out ) ; fclose (in) ; fclose (out) ; 打開源文件打開源文件 打開目標(biāo)文件打開目標(biāo)文件 當(dāng)源文件未結(jié)束時,讀一個字符寫當(dāng)源文件未結(jié)束時,讀一個字符寫 入目標(biāo)文件。入目標(biāo)文件。 關(guān)閉文件關(guān)閉文件 chp8ex1 舉例:將一個磁盤文件中的內(nèi)容復(fù)制到另一個文件中。舉例:將一個磁盤文件中的內(nèi)容
11、復(fù)制到另一個文件中。 Hefei University of Technology 文件的字符串的輸入和輸出函數(shù)文件的字符串的輸入和輸出函數(shù) 字符串輸入函數(shù)字符串輸入函數(shù) 使用方法:使用方法: fgets(str , n , fp); 含含 義:義:從從fp所對應(yīng)的文件的當(dāng)前位置讀所對應(yīng)的文件的當(dāng)前位置讀n-1 個字符到個字符到str所指所指 向的內(nèi)存單元。并在結(jié)束處加向的內(nèi)存單元。并在結(jié)束處加0表示字符串結(jié)束。表示字符串結(jié)束。 三種情況可以使輸入結(jié)束:三種情況可以使輸入結(jié)束: v輸入完輸入完n-1個字符;個字符; v輸入時遇到輸入時遇到n; v輸入時遇到文件結(jié)束標(biāo)志。輸入時遇到文件結(jié)束標(biāo)志。
12、 字符串輸出函數(shù)字符串輸出函數(shù) 使用方法:使用方法: fputs(str , fp); 含含 義:義:將將str指向的字符串,輸出到指向的字符串,輸出到fp所對應(yīng)的文件中,并忽所對應(yīng)的文件中,并忽 略輸出字符串結(jié)束標(biāo)志略輸出字符串結(jié)束標(biāo)志0。 Hefei University of Technology #include #include #define SIZE 256 void main ( int argc , char *argc ) char buffSIZE ; FILE *fpr,*fpw ; fpw=stdprn ; if( fpr = fopen ( argc1 , “r”
13、) = NULL ) printf ( “File open error!n ” ) ; exit (0) ; while (fgets (buff , SIZE , fpr) != NULL ) fputs (buff , fpw ) ; fclose (fpr) ; 打開文件打開文件 輸入。輸入。 輸出到打印機(jī)。輸出到打印機(jī)。 文件指針執(zhí)行設(shè)備:文件指針執(zhí)行設(shè)備: stdprn 打印機(jī);打印機(jī);stdaux 串口;串口; stdin、stdout。 舉例:從文件中輸入字符串,并打印其內(nèi)容。舉例:從文件中輸入字符串,并打印其內(nèi)容。 Hefei University of Technology
14、 文件的格式化輸入和輸出函數(shù)文件的格式化輸入和輸出函數(shù) v fp文件指針文件指針 v format ,格式說明字符串,取,格式說明字符串,取%d、%x、%f、%c等;等; 說明輸入轉(zhuǎn)化的格式。說明輸入轉(zhuǎn)化的格式。 v 含義:含義:從從fp對應(yīng)的文件的當(dāng)前位置,順序讀入一個字符序列,對應(yīng)的文件的當(dāng)前位置,順序讀入一個字符序列, 按按format說明的格式和類型進(jìn)行轉(zhuǎn)換并存放到對應(yīng)變量單元。說明的格式和類型進(jìn)行轉(zhuǎn)換并存放到對應(yīng)變量單元。 Hefei University of Technology #include #include void main (void) char s80 ; int
15、a ; FILE *fp ; if ( fp=fopen ( “text.txt” , “r” ) = NULL) printf (“cannot open file “ ) ; exit (0) ; fscanf ( fp , “%s %d “ , s , printf ( “%s,%d”, s , a ) ; chp8ex2 打開文件打開文件 輸入數(shù)據(jù)。輸入數(shù)據(jù)。 例:從例:從text.txt中讀字符串和一個十進(jìn)制數(shù),輸出到顯示器。中讀字符串和一個十進(jìn)制數(shù),輸出到顯示器。 Hefei University of Technology v fp文件指針文件指針; v format ,格式說明
16、字符串,取,格式說明字符串,取%d、%x、%f、%c等;等; 說明輸出轉(zhuǎn)化的格式。說明輸出轉(zhuǎn)化的格式。 v arg1argn,輸出量列表。,輸出量列表。 使用方法:使用方法: fprintf ( fp , format , arg1, arg n ) ; 含義:含義: 以指定的格式(以指定的格式(format),將),將arg1arg n的值,轉(zhuǎn)換的值,轉(zhuǎn)換 為字符序列,寫入為字符序列,寫入fp 文件的當(dāng)前位置。文件的當(dāng)前位置。 FILE *fp; fp=fopen(“s.dat”,”w”); fprint(fp,”%d%c”,123,c); fclose(fp); 格式化輸出函數(shù)格式化輸出函
17、數(shù) fprintf Hefei University of Technology 文件的數(shù)據(jù)塊輸入輸出函數(shù)文件的數(shù)據(jù)塊輸入輸出函數(shù) v buf(空類型指針空類型指針)接收數(shù)據(jù)的地址;接收數(shù)據(jù)的地址; v size(整型整型)一次讀取數(shù)據(jù)的字節(jié)數(shù);一次讀取數(shù)據(jù)的字節(jié)數(shù); v count(整型整型)讀取次數(shù);讀取次數(shù); v fp對應(yīng)輸入文件的文件指針。對應(yīng)輸入文件的文件指針。 fread( )函數(shù)函數(shù) 使用方法:使用方法: fread(buf,size,count,fp); 含義:含義:從從 fp 指向的文件的當(dāng)前位置,每次讀取指向的文件的當(dāng)前位置,每次讀取size個字節(jié),共個字節(jié),共 讀讀cou
18、nt 次讀入數(shù)據(jù),存放到次讀入數(shù)據(jù),存放到buf指向的內(nèi)存處。指向的內(nèi)存處。 返回值:返回值: v調(diào)用正確調(diào)用正確,返回輸入的項(xiàng)數(shù);返回輸入的項(xiàng)數(shù); v調(diào)用錯誤,返回調(diào)用錯誤,返回-1(EOF)。 FILE *fp; char str80; fp=fopen(“s.dat”,”r”); fread(str,20,3,fp); Hefei University of Technology fwrite函數(shù)函數(shù) v buf(空類型指針空類型指針)數(shù)據(jù)的地址;數(shù)據(jù)的地址; v size(整型整型)一次輸出數(shù)據(jù)的字節(jié)數(shù);一次輸出數(shù)據(jù)的字節(jié)數(shù); v count(整型整型)輸出次數(shù);輸出次數(shù); v fp對
19、應(yīng)輸出文件的文件指針。對應(yīng)輸出文件的文件指針。 使用方法:使用方法: fwrite(buf,size,count,fp); 含義:含義:從從buf 開始,分開始,分count次,每次次,每次size個字節(jié),向個字節(jié),向fp對應(yīng)文對應(yīng)文 件的當(dāng)前位置寫數(shù)據(jù)。件的當(dāng)前位置寫數(shù)據(jù)。 返回值:返回值: v調(diào)用正確時,返回調(diào)用正確時,返回 count。 v調(diào)用錯誤時,返回調(diào)用錯誤時,返回 -1(EOF)。 Hefei University of Technology 舉例:舉例: #include #include void main(void) FILE *stream; char msg = “Th
20、is is a test“,buf20; stream = fopen(TEST1.DAT, w+); fwrite(msg, strlen(msg)+1, 1, stream); fseek(stream, SEEK_SET, 0); fread(buf, strlen(msg)+1, 1, stream); printf(%sn, buf); fclose(stream); 打開文件。打開文件。 寫數(shù)據(jù)到文件。寫數(shù)據(jù)到文件。 重新定位到文件頭。重新定位到文件頭。 chp8ex3 Hefei University of Technology 9.5 文件的定位操作文件的定位操作 以上的所有文
21、件的讀寫都是以上的所有文件的讀寫都是順序的順序的,完成一次讀寫操作后,文,完成一次讀寫操作后,文 件的件的記錄位置自動指向下一位置記錄位置自動指向下一位置,因而稱為順序的流式文件。用戶,因而稱為順序的流式文件。用戶 想使用任意的讀寫想使用任意的讀寫 位置,可以通過定位函數(shù)實(shí)現(xiàn)。位置,可以通過定位函數(shù)實(shí)現(xiàn)。 取文件當(dāng)前位置取文件當(dāng)前位置 ftell函數(shù)函數(shù) long n; n=ftell(fp); 含義:含義:取文件的當(dāng)前的讀寫位置取文件的當(dāng)前的讀寫位置( (從文件頭到當(dāng)前的字節(jié)數(shù)從文件頭到當(dāng)前的字節(jié)數(shù)) )。 返回值(返回值(long):): v調(diào)用正確,返回當(dāng)前位置域文件都相差的字節(jié)數(shù);調(diào)用
22、正確,返回當(dāng)前位置域文件都相差的字節(jié)數(shù); v調(diào)用錯誤,返回調(diào)用錯誤,返回 -1L。 Hefei University of Technology 改變文件指針的當(dāng)前位置改變文件指針的當(dāng)前位置 fseek函數(shù)函數(shù) v fp文件指針文件指針; v offset(long int),以,以from為起點(diǎn)移動的偏移量;為起點(diǎn)移動的偏移量; v from為移動的起始位置。為移動的起始位置。 使用方法使用方法: fseek( fp , offset , from) ; from 在在stdio.h中定義了如下常量:中定義了如下常量: 值常量符號位置 0SEEK_SET 文件頭 1SEEK_CUR 當(dāng)前位置
23、 2SEEK_END 文件尾 fseek( fp , 50L, SEEK_SET) fp對應(yīng)文件的當(dāng)前位置對應(yīng)文件的當(dāng)前位置 移到文件頭移到文件頭50字節(jié)處。字節(jié)處。 置文件于開頭位置置文件于開頭位置 rewind( ) 函數(shù)函數(shù) 使用方法:使用方法: rewind(fp); Hefei University of Technology #include #include #define N 30 struct student char name10 ; int no ; int score ; stud N ; void main (void ) int i; FILE *fp ; fp=fopen(“std.lst” , “rb” ); for (
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025租賃合同模板示例
- 《兒科國考復(fù)習(xí)資料》課件
- 2025河畔土地租賃投資合同樣本
- 2025有關(guān)技術(shù)授權(quán)合同的范本
- 白酒代理商合同協(xié)議范本
- 瑜伽卡轉(zhuǎn)讓會員合同協(xié)議
- 物資采購單價(jià)合同協(xié)議
- 獨(dú)立別墅買賣合同協(xié)議
- 監(jiān)測系統(tǒng)銷售合同協(xié)議
- 電商營銷中心合同協(xié)議
- 2024北京一零一中初二(下)期中數(shù)學(xué)試題及答案
- 2025-2030中國考試系統(tǒng)行業(yè)市場發(fā)展現(xiàn)狀分析及發(fā)展趨勢與投資前景研究報(bào)告
- GB/T 45456-2025包裝折疊紙盒折痕挺度的測定
- 所得稅會計(jì)試題及答案
- 國企薪酬福利體系與市場化改革
- 2025年保安員職業(yè)技能考試筆試試題(700題)附答案
- 2025屆江蘇省江陰市四校高三下-第四次月考數(shù)學(xué)試題試卷
- 2025年04月國家稅務(wù)總局稅務(wù)干部學(xué)院公開招聘事業(yè)單位工作人員36人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 2025年鄭州理工職業(yè)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- Unit 4 Healthy food B Lets learn(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教PEP版(2024)英語三年級下冊
- 《知不足而后進(jìn) 望山遠(yuǎn)而力行》期中家長會課件
評論
0/150
提交評論