




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章文件信息工程學(xué)院主講人:XXX內(nèi)容提要4
文件的相關(guān)概念12文件的打開與關(guān)閉423文件的順序讀寫與隨機(jī)讀寫42文件的出錯(cuò)檢測425244419.1文件的相關(guān)概念(1)按文件中數(shù)據(jù)存放的格式,可以將文件分為“二進(jìn)制文件”和“文本文件”。二進(jìn)制文件中的數(shù)據(jù)都是以二進(jìn)制形式(機(jī)器數(shù))存放的。(2)按文件的讀寫方式,可以將文件分為順序文件和隨機(jī)文件。對順序文件來說,讀寫必須從頭開始。讀取數(shù)據(jù)時(shí),只能從第1個(gè)數(shù)據(jù)開始讀取,直到讀取的數(shù)據(jù)就是要處理的數(shù)據(jù)為止。如果要把處理后的這個(gè)數(shù)據(jù)寫回順序文件中,也必須是從第1個(gè)數(shù)據(jù)開始,依次把所有數(shù)據(jù)寫到文件中。對隨機(jī)文件來說,讀寫的過程是隨機(jī)的,只要利用系統(tǒng)函數(shù)將當(dāng)前文件中的讀寫位置設(shè)置好,就可以單獨(dú)對這個(gè)數(shù)據(jù)進(jìn)行讀寫操作。文件指針在C語言中,可用一個(gè)指針變量指向一個(gè)文件,這個(gè)指針變量稱為文件指針。通過文件指針就可以對它所指向的文件進(jìn)行操作了。定義文件指針的一般形式為:FILE*指針變量名;其中,F(xiàn)ILE應(yīng)為大寫,它是由系統(tǒng)定義的一個(gè)結(jié)構(gòu),該結(jié)構(gòu)中含有文件名、文件狀態(tài)和文件當(dāng)前位置等信息。在編程時(shí)不必關(guān)心FILE結(jié)構(gòu)的細(xì)節(jié)。
9.2文件的打開與關(guān)閉文件打開函數(shù)用fopen函數(shù)打開一個(gè)文件,函數(shù)定義的一般形式為:FILE*fopen(constchar*path,constchar*mode);path字符串包含欲打開的文件路徑及文件名,mode字符串則代表流形態(tài)。mode有下列幾種形態(tài)。(1)r:打開只讀文件,該文件必須存在。(2)r+:打開可讀寫的文件,該文件必須存在。(3)w:打開只寫文件,若文件存在,則文件長度清為0,即該文件內(nèi)容會消失。若文件不存在,則建立該文件。(4)w+:打開可讀寫文件,若文件存在,則文件長度清為零,即該文件內(nèi)容會消失。若文件不存在,則建立該文件。(5)a:以附加的方式打開只寫文件。若文件不存在,則建立該文件,若文件存在,則寫入的數(shù)據(jù)會被加到文件尾,即文件原來的內(nèi)容會被保留。(6)a+:以附加方式打開可讀寫文件。若文件不存在,則建立該文件,若文件存在,則寫入的數(shù)據(jù)會被加到文件尾后,即文件原來的內(nèi)容會被保留。9.2文件的打開與關(guān)閉例如:FILE*fp=fopen("d:\a.txt","r");表示要打開d:\a.txt文件,文件操作方式為“只讀”,fopen函數(shù)返回指向a.txt文件的指針并賦給fp,這樣,fp和a.txt就建立聯(lián)系了,或者說fp指向a.txt文件。關(guān)閉文件用fclose函數(shù)實(shí)現(xiàn),調(diào)用fopen函數(shù)的一般形式為:fclose(文件指針變量);例如:fclose(fp);9.2文件的打開與關(guān)閉【例9.1】文件的打開與關(guān)閉。9.3文件的順序讀寫C語言提供了輸出一個(gè)字符到磁盤文件的fputc函數(shù)。其一般形式如下:fputc(ch,fp);它的功能是將字符變量ch的值輸出到指針變量fp所指向的FILE結(jié)構(gòu)體的文件中。這個(gè)fp是用fopen函數(shù)打開時(shí)得到的。如果調(diào)用成功,則返回該字符,否則返回EOF。C語言還提供了從磁盤文件中接收一個(gè)字符的fgetc函數(shù)。其一般形式如下:ch=fgetc(fp);它的功能是從指針變量fp所指向的文件中讀入一個(gè)字符并賦給字符變量ch。如果執(zhí)行fgetc函數(shù)時(shí)遇到文件結(jié)束或出錯(cuò),則返回EOF。9.3文件的順序讀寫【例9.2】fputc函數(shù)和fgetc函數(shù)的使用。9.3文件的順序讀寫【例9.3】分析下面程序的運(yùn)行結(jié)果。9.3文件的順序讀寫C語言提供了一個(gè)從磁盤文件中輸入字符串的fgets函數(shù),其一般形式如下:fgets(str,n,fp);它的功能是從fp指向的文件中讀取n?1個(gè)字符并把它們放到字符數(shù)組str中。如果在讀入n?1個(gè)字符完成之前遇到換行符\n或文件結(jié)束符EOF,則結(jié)束讀入,但將遇到的換行符\n也作為一個(gè)字符送入字符數(shù)組str中。C語言還提供一個(gè)輸出字符串到磁盤文件的fputs函數(shù)。其一般形式如下:fputs(str,fp);它的功能是將字符數(shù)組str中的字符串輸出到fp所指向的文件。但字符串的結(jié)束符\0不輸出。如果成功,則返回0,否則返回非0。9.3文件的順序讀寫【例9.4】fputs函數(shù)和fgets函數(shù)的使用。9.3文件的順序讀寫9.3.3fprintf函數(shù)和fscanf函數(shù)fprintf與fscanf函數(shù)為格式讀寫函數(shù),與printf、scanf類似,fprintf與fscanf用于從文件中讀取指定格式的數(shù)據(jù)和把指定格式的數(shù)據(jù)寫入文件,這是按數(shù)據(jù)格式要求進(jìn)行文件的輸入/輸出。其一般形式為:fscanf(fp,format,args);fprintf(fp,format,args);其中,fp為文件指針,format為格式控制字符串,args為輸入或輸出的地址列表。例如,若文件指針fp已指向一個(gè)已打開的文件文本,a、b分別為整型變量,則以下語句從fp所指向的文件中讀入兩個(gè)整數(shù)放入變量a和b中。fscanf(fp,”%d%d”,&a,&b);又如,若文件指針fp已指向一個(gè)已打開的文件文本,x、y分別為整型變量,則以下語句將x、y中的數(shù)據(jù)按%d的格式輸出到fp所指向的文件中。fprintf(fp,"%d%d",&a,&b);9.3文件的順序讀寫【例9.5】fprintf函數(shù)和fscanf函數(shù)的使用。9.4文件的隨機(jī)讀寫上節(jié)介紹的對文件的讀寫都是順序讀寫,即從文件的開頭對數(shù)據(jù)逐個(gè)讀寫。文件中有一個(gè)讀寫位置的內(nèi)部指針,指向當(dāng)前讀寫的位置。在順序讀寫時(shí),每讀或?qū)懸粋€(gè)數(shù)據(jù)后,位置指針就自動移到它后面一個(gè)位置。如果讀寫的數(shù)據(jù)項(xiàng)包含多字節(jié),則對該數(shù)據(jù)項(xiàng)讀寫完后位置指針就移到該數(shù)據(jù)項(xiàng)之末了。在實(shí)際讀寫文件中,人們常常希望能直接讀到某一數(shù)據(jù)項(xiàng)而不是按物理位置順序逐個(gè)讀下來。這種可以任意指定讀寫位置的操作稱為文件的隨機(jī)讀寫??梢韵胂螅灰芤苿游恢弥羔樀剿枰牡胤?,實(shí)現(xiàn)文件的定位,就能實(shí)現(xiàn)隨機(jī)讀寫。9.4文件的隨機(jī)讀寫1.fseek函數(shù)fseek函數(shù)的功能是使位置指針移動到所需的指定位置,調(diào)用fseek函數(shù)的一般形式為fseek(文件類型指針,位移量,起始點(diǎn))其中,起始點(diǎn)是指用數(shù)字代表以什么地方作為基準(zhǔn)進(jìn)行移動。0,1,2分別代表文件的開頭、當(dāng)前位置和結(jié)尾。如果位移量為正數(shù)則表示以起始點(diǎn)為基點(diǎn)向前移動的字節(jié)數(shù),否則表示以起始點(diǎn)為基點(diǎn)向后移動的字節(jié)數(shù)。位移量應(yīng)該為long型數(shù)據(jù),這樣當(dāng)文件長度很長時(shí),位移量仍在long型數(shù)據(jù)的表示范圍內(nèi)。例如:fseek(fp,10L,0);將位置指針移動到距文件開始處10字節(jié)的地方。若函數(shù)調(diào)用成功,則返回值為0,否則返回一個(gè)非0值。2.ftell函數(shù)ftell函數(shù)的作用是返回位置指針的當(dāng)前位置。其一般形式為:ftell(fp);ftell函數(shù)的返回值是fp所指向的文件中位置指針的當(dāng)前位置。如果出錯(cuò),則ftell的返回值為?13.rewind函數(shù)rewind函數(shù)的作用是使位置指針重新返回到文件的開頭處。其一般形式為:rewind(fp);rewind函數(shù)無返回值。9.5文件操作的出錯(cuò)檢測大多數(shù)標(biāo)準(zhǔn)I/O函數(shù)并不具有明確的出錯(cuò)信息返回。例如,如果調(diào)用fputc函數(shù)返回EOF,它可能表示文件結(jié)束,也可能是調(diào)用失敗或出錯(cuò)。調(diào)用fgets函數(shù)時(shí),如果返回NULL,它可能是文件結(jié)束,也可能是出錯(cuò)。為了明確地檢查出操作是否出錯(cuò),C提供了一個(gè)檢測文件操作的出錯(cuò)函數(shù)ferror。例如:ferror(fp);如果函數(shù)的返回值為0,則表示沒有出錯(cuò),否則表示出錯(cuò)。在調(diào)用fopen函數(shù)時(shí),會自動使相應(yīng)文件的ferror函數(shù)的初值為零。應(yīng)當(dāng)注意,每調(diào)用一次輸入/輸出函數(shù)后,都有一個(gè)ferror函數(shù)值與之對應(yīng)。如果想檢測的調(diào)用輸入/輸出函數(shù)是否出錯(cuò),應(yīng)在調(diào)用該函數(shù)后立即
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 咨詢返傭協(xié)議合同協(xié)議
- 快遞協(xié)議客戶合同書范本
- 2025技術(shù)授權(quán)合同(3)新
- 2025商業(yè)店鋪買賣合同范本
- 2025標(biāo)準(zhǔn)版委托檢驗(yàn)合同范本
- 商品類預(yù)售合同協(xié)議
- 商店招聘店員合同協(xié)議
- 2025商務(wù)合同雙語條款目錄范本
- 櫥柜銷售任務(wù)合同協(xié)議
- 戀愛同居協(xié)議書模板
- 南京信息工程大學(xué)畢業(yè)答辯模板
- 藥學(xué)專業(yè)社會實(shí)踐報(bào)告3000字
- 宮頸炎的護(hù)理查房
- 超市生鮮采購流程制度完整
- 血友病特點(diǎn)和常見治療方式宣教
- 2022年山東省青島一中自主招生化學(xué)模擬試卷一(附答案詳解)
- 圖紙會審記錄表格模板
- 實(shí)體門店管理規(guī)定薪酬績效管理規(guī)定
- 五年級下冊綜合實(shí)踐活動教案-有趣的拉線偶人 全國通用
- 人教版四年級數(shù)學(xué)下冊《營養(yǎng)午餐》評課稿
- 供應(yīng)商質(zhì)量事故索賠單
評論
0/150
提交評論