版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C語言程序設(shè)計
文件 12.1文件概述
12.2文件類型指針
12.3文件打開與關(guān)閉
12.3.1文件打開(fopen函數(shù))
12.3.2文件關(guān)閉(fclose函數(shù)) 12.4文件讀寫
12.4.1字符讀寫函數(shù)
12.4.2字符串讀寫函數(shù)
12.4.3數(shù)據(jù)塊讀寫函數(shù)
12.4.4格式化讀寫函數(shù)
12.5文件定位
12.5.1rewind函數(shù)
12.5.2fseek函數(shù)
12.1文件概述所謂文件是指一組相關(guān)數(shù)據(jù)的有序集合。這個數(shù)據(jù)集有一個名稱,叫做文件名。實際上在前面的各章中已經(jīng)多次使用了文件,例如源程序文件、目標(biāo)文件、可執(zhí)行文件、庫文件(頭文件)等。文件通常是駐留在外部介質(zhì)(如磁盤等)上的,在使用時才調(diào)入內(nèi)存中來。從不同的角度可對文件作不同的分類。從用戶的角度看,文件可分為普通文件和設(shè)備文件兩種。在C語言中,文件是字符(字節(jié))的序列,稱字節(jié)流,或稱二進(jìn)制流。根據(jù)數(shù)據(jù)的組織形式,C文件可分為ASCII碼文件(又稱文本文件,或稱正文文件)和二進(jìn)制文件。例如整數(shù)inta=1025,這兩種文件的存儲形式是不同的,如圖所示。圖12-2打開文件、讀或?qū)?、關(guān)閉文件文件處理必須包含三個基本過程:打開文件,讀或?qū)?,關(guān)閉文件。流式文件分打開、關(guān)閉、讀、寫、定位等各種操作。文件指針在C語言中用一個指針變量指向一個文件,這個指針稱為文件指針。通過文件指針就可對它所指的文件進(jìn)行各種操作。文件緩沖區(qū)是一種結(jié)構(gòu)類型,在庫頭文件stdio.h中定義:typedefstruct{shortlevel;unsignedflags;charfd;unsignedcharhold;shortbsize;unsignedchar*buffer;unsignedchar*curp;unsignedistemp;shorttoken;}FILE;12.2文件類型指針
文件定義的一般格式:FILE文件指針;FILE是文件緩沖區(qū)的類型名,必須大寫。文件指針指向文件緩沖區(qū)的指針。例如:FILE*fp;文件緩沖區(qū)是一片內(nèi)存空間,存放著處理文件的有關(guān)信息,fp指向這片內(nèi)存空間。文件處理全由庫函數(shù)實現(xiàn)。其中FILE應(yīng)為大寫,它實際上是由系統(tǒng)定義的一個結(jié)構(gòu),該結(jié)構(gòu)中含有文件名、文件狀態(tài)和文件當(dāng)前位置等信息。在編寫源程序時不必關(guān)心FILE結(jié)構(gòu)的細(xì)節(jié)。12.3文件打開與關(guān)閉打開文件需調(diào)用庫fopen函數(shù)。
它的一般調(diào)用格式:fopen(文件說明符,模式);文件說明符指定打開的文件名,可以包含盤符、路徑、文件名,是字符串。模式指定打開的文件讀寫方式,是字符串,必須小寫。模式如下:文本文件(默認(rèn)參數(shù)t可以不寫): r(只讀)r+(讀寫) w(只寫)w+(讀寫) a(追加,寫)a+(追加,讀寫)二進(jìn)制文件(參數(shù)b表示二進(jìn)制): rb(只讀)rb+(讀寫) wb(只寫)wb+(讀寫) ab(追加,寫)ab+(追加,讀寫)12.3.1文件打開(fopen函數(shù))12.3.2文件關(guān)閉(fclose函數(shù))關(guān)閉文件需調(diào)用庫fclose函數(shù)。
它的一般調(diào)用格式:fclose(文件指針);例如:fclose(fp);
文件一旦使用完畢,應(yīng)用關(guān)閉文件函數(shù)把文件關(guān)閉,以避免文件的數(shù)據(jù)丟失等錯誤。
正常完成關(guān)閉文件操作時,fclose函數(shù)返回值為0。
如返回非零值則表示有錯誤發(fā)生。12.4文件讀寫12.4.1字符讀寫函數(shù)1.讀字符函數(shù)fgetcfgetc函數(shù)的功能是從指定的文件中讀一個字符,函數(shù)調(diào)用的形式為:字符變量=fgetc(文件指針);例如:ch=fgetc(fp);其意義是從打開的文件fp中讀取一個字符并送入ch中。對于fgetc函數(shù)的使用有以下幾點(diǎn)說明:(1)在fgetc函數(shù)調(diào)用中,讀取的文件必須是以讀或讀寫方式打開的。(2)讀取字符的結(jié)果也可以不向字符變量賦值,例如:fgetc(fp);但是讀出的字符不能保存。(3)在文件內(nèi)部有一個位置指針。用來指向文件的當(dāng)前讀寫字節(jié)。在文件打開時,該指針總是指向文件的第一個字節(jié)。使用fgetc函數(shù)后,該位置指針將向后移動一個字節(jié)。因此可連續(xù)多次使用fgetc函數(shù),讀取多個字符。應(yīng)注意文件指針和文件內(nèi)部的位置指針不是一回事。文件指針是指向整個文件的,須在程序中定義說明,只要不重新賦值,文件指針的值是不變的。文件內(nèi)部的位置指針用以指示文件內(nèi)部的當(dāng)前讀寫位置,每讀寫一次,該指針均向后移動,它不需在程序中定義說明,而是由系統(tǒng)自動設(shè)置的。2.寫字符函數(shù)fputcfputc函數(shù)的功能是把一個字符寫入指定的文件中,函數(shù)調(diào)用的形式為:fputc(字符量,文件指針);其中,待寫入的字符量可以是字符常量或變量,例如:fputc('a',fp);其意義是把字符a寫入fp所指向的文件中。對于fputc函數(shù)的使用也要說明幾點(diǎn):(1)被寫入的文件可以用、寫、讀寫、追加方式打開,用寫或讀寫方式打開一個已存在的文件時將清除原有的文件內(nèi)容,寫入字符從文件首開始。如需保留原有文件內(nèi)容,希望寫入的字符以文件末開始存放,必須以追加方式打開文件。被寫入的文件若不存在,則創(chuàng)建該文件。(2)每寫入一個字符,文件內(nèi)部位置指針向后移動一個字節(jié)。(3)fputc函數(shù)有一個返回值,如寫入成功則返回寫入的字符,否則返回一個EOF??捎么藖砼袛鄬懭胧欠癯晒?。12.4.2字符串讀寫函數(shù)
1.讀字符串函數(shù)fgets函數(shù)的功能是從指定的文件中讀一個字符串到字符數(shù)組中。函數(shù)調(diào)用的形式為:fgets(字符數(shù)組名,n,文件指針);
其中的n是一個正整數(shù)。表示從文件中讀出的字符串不超過n-1個字符。
在讀入的最后一個字符后加上串結(jié)束標(biāo)志'\0'。例如:fgets(str,n,fp);
意義是從fp所指的文件中讀出n-1個字符送入字符數(shù)組str中。2.寫字符串函數(shù)fputsfputs函數(shù)的功能是向指定的文件寫入一個字符串。
其調(diào)用形式為:
fputs(字符串,文件指針)
其中字符串可以是字符串常量,也可以是字符數(shù)組名,或指針變量。
例如:fputs("abcd",fp);其意義是把字符串"abcd"寫入fp所指的文件之中。12.4.3數(shù)據(jù)塊讀寫函數(shù)
C語言還提供了用于整塊數(shù)據(jù)的讀寫函數(shù)??捎脕碜x寫一組數(shù)據(jù),如一個數(shù)組元素,一個結(jié)構(gòu)變量的值等。讀數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:
fread(buffer,size,count,fp);寫數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:
fwrite(buffer,size,count,fp);
其中buffer是一個指針,在fread函數(shù)中,它表示存放輸入數(shù)據(jù)的首地址。在fwrite函數(shù)中,它表示存放輸出數(shù)據(jù)的首地址。例如:fread(fa,4,5,fp);
其意義是從fp所指的文件中,每次讀4個字節(jié)(一個實數(shù))送入實數(shù)組fa中,連續(xù)讀5次,即讀5個實數(shù)到fa中。12.4.4格式化讀寫函數(shù)
fscanf函數(shù),fprintf函數(shù)與前面使用的scanf和printf函數(shù)的功能相似,都是格式化讀寫函數(shù)。兩者的區(qū)別在于fscanf函數(shù)和fprintf函數(shù)的讀寫對象不是鍵盤和顯示器,而是磁盤文件。這兩個函數(shù)的調(diào)用格式為:
fscanf(文件指針,格式字符串,輸入表列);
fprintf(文件指針,格式字符串,輸出表列);例如:
fscanf(fp,"%d%s",&i,s);fprintf(fp,"%d%c",j,ch);12.5文件定位文件定位移動文件內(nèi)部位置指針的函數(shù)主要有兩個,即rewind函數(shù)和fseek函數(shù)。(1)rewind函數(shù)前面已多次使用過,其調(diào)用形式為:rewind(文件指針);它的功能是把文件內(nèi)部的位置指針移到文件首。12.5.1rewind函數(shù)12.5.2fseek函數(shù)
fseek函數(shù)來移動文件內(nèi)部位置指針。其調(diào)用形式為:
fseek(文件指針,位移量,起始點(diǎn));
其中:“文件指針”指向被移動的文件。“位移量”表示移動的字節(jié)數(shù),要求位移量是long型數(shù)據(jù),以便在文件長度大于64KB時不會出錯。當(dāng)用常量表示位移量時,要求加后綴“L”?!捌鹗键c(diǎn)”表示從何處開始計算位移量,規(guī)定的起始點(diǎn)有三種:文件首、當(dāng)前位置和文件尾.
本章小結(jié)
文件是程序設(shè)計中的一個重要的概念。數(shù)據(jù)是以文件的形式存放在外部介質(zhì)(如磁盤)上的。
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 快遞信息處理員成果強(qiáng)化考核試卷含答案
- 己二腈裝置操作工崗前競爭分析考核試卷含答案
- 方便面制作工崗前安全檢查考核試卷含答案
- 海洋環(huán)境監(jiān)測員操作評估能力考核試卷含答案
- 電力電容器真空浸漬工安全生產(chǎn)基礎(chǔ)知識強(qiáng)化考核試卷含答案
- 快件處理員安全技能測試考核試卷含答案
- 生物柴油裝置操作工安全知識宣貫考核試卷含答案
- 2024年益陽職業(yè)技術(shù)學(xué)院輔導(dǎo)員招聘考試真題匯編附答案
- 油鋸工崗前趨勢考核試卷含答案
- 鋁電解工崗前技術(shù)操作考核試卷含答案
- 電梯更換配件協(xié)議書
- 中海大海洋地質(zhì)學(xué)課件第12章海底礦產(chǎn)資源-1第二十二講
- 膽囊癌教學(xué)課件
- 人教版七年級上冊道德與法治期末模擬綜合測試題
- NBT 11508-2024 配電自動化工程可行性研究報告內(nèi)容深度規(guī)定
- (新交際英語2024版)英語一年級上冊全冊單元測試(含聽力音頻+解析)
- 運(yùn)輸公司安全生產(chǎn)培訓(xùn)計劃
- 狼和鴨子兒童故事課件
- 駁回再審裁定書申請抗訴范文
- 2025北京高三二模語文匯編:微寫作
- DB6301∕T 4-2023 住宅物業(yè)星級服務(wù)規(guī)范
評論
0/150
提交評論