C語(yǔ)言程序設(shè)計(jì)課件:文件_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件:文件_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件:文件_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件:文件_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件:文件_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C語(yǔ)言程序設(shè)計(jì)

文件 12.1文件概述

12.2文件類(lèi)型指針

12.3文件打開(kāi)與關(guān)閉

12.3.1文件打開(kāi)(fopen函數(shù))

12.3.2文件關(guān)閉(fclose函數(shù)) 12.4文件讀寫(xiě)

12.4.1字符讀寫(xiě)函數(shù)

12.4.2字符串讀寫(xiě)函數(shù)

12.4.3數(shù)據(jù)塊讀寫(xiě)函數(shù)

12.4.4格式化讀寫(xiě)函數(shù)

12.5文件定位

12.5.1rewind函數(shù)

12.5.2fseek函數(shù)

12.1文件概述所謂文件是指一組相關(guān)數(shù)據(jù)的有序集合。這個(gè)數(shù)據(jù)集有一個(gè)名稱(chēng),叫做文件名。實(shí)際上在前面的各章中已經(jīng)多次使用了文件,例如源程序文件、目標(biāo)文件、可執(zhí)行文件、庫(kù)文件(頭文件)等。文件通常是駐留在外部介質(zhì)(如磁盤(pán)等)上的,在使用時(shí)才調(diào)入內(nèi)存中來(lái)。從不同的角度可對(duì)文件作不同的分類(lèi)。從用戶(hù)的角度看,文件可分為普通文件和設(shè)備文件兩種。在C語(yǔ)言中,文件是字符(字節(jié))的序列,稱(chēng)字節(jié)流,或稱(chēng)二進(jìn)制流。根據(jù)數(shù)據(jù)的組織形式,C文件可分為ASCII碼文件(又稱(chēng)文本文件,或稱(chēng)正文文件)和二進(jìn)制文件。例如整數(shù)inta=1025,這兩種文件的存儲(chǔ)形式是不同的,如圖所示。圖12-2打開(kāi)文件、讀或?qū)?、關(guān)閉文件文件處理必須包含三個(gè)基本過(guò)程:打開(kāi)文件,讀或?qū)?,關(guān)閉文件。流式文件分打開(kāi)、關(guān)閉、讀、寫(xiě)、定位等各種操作。文件指針在C語(yǔ)言中用一個(gè)指針變量指向一個(gè)文件,這個(gè)指針?lè)Q為文件指針。通過(guò)文件指針就可對(duì)它所指的文件進(jìn)行各種操作。文件緩沖區(qū)是一種結(jié)構(gòu)類(lèi)型,在庫(kù)頭文件stdio.h中定義:typedefstruct{shortlevel;unsignedflags;charfd;unsignedcharhold;shortbsize;unsignedchar*buffer;unsignedchar*curp;unsignedistemp;shorttoken;}FILE;12.2文件類(lèi)型指針

文件定義的一般格式:FILE文件指針;FILE是文件緩沖區(qū)的類(lèi)型名,必須大寫(xiě)。文件指針指向文件緩沖區(qū)的指針。例如:FILE*fp;文件緩沖區(qū)是一片內(nèi)存空間,存放著處理文件的有關(guān)信息,fp指向這片內(nèi)存空間。文件處理全由庫(kù)函數(shù)實(shí)現(xiàn)。其中FILE應(yīng)為大寫(xiě),它實(shí)際上是由系統(tǒng)定義的一個(gè)結(jié)構(gòu),該結(jié)構(gòu)中含有文件名、文件狀態(tài)和文件當(dāng)前位置等信息。在編寫(xiě)源程序時(shí)不必關(guān)心FILE結(jié)構(gòu)的細(xì)節(jié)。12.3文件打開(kāi)與關(guān)閉打開(kāi)文件需調(diào)用庫(kù)fopen函數(shù)。

它的一般調(diào)用格式:fopen(文件說(shuō)明符,模式);文件說(shuō)明符指定打開(kāi)的文件名,可以包含盤(pán)符、路徑、文件名,是字符串。模式指定打開(kāi)的文件讀寫(xiě)方式,是字符串,必須小寫(xiě)。模式如下:文本文件(默認(rèn)參數(shù)t可以不寫(xiě)): r(只讀)r+(讀寫(xiě)) w(只寫(xiě))w+(讀寫(xiě)) a(追加,寫(xiě))a+(追加,讀寫(xiě))二進(jìn)制文件(參數(shù)b表示二進(jìn)制): rb(只讀)rb+(讀寫(xiě)) wb(只寫(xiě))wb+(讀寫(xiě)) ab(追加,寫(xiě))ab+(追加,讀寫(xiě))12.3.1文件打開(kāi)(fopen函數(shù))12.3.2文件關(guān)閉(fclose函數(shù))關(guān)閉文件需調(diào)用庫(kù)fclose函數(shù)。

它的一般調(diào)用格式:fclose(文件指針);例如:fclose(fp);

文件一旦使用完畢,應(yīng)用關(guān)閉文件函數(shù)把文件關(guān)閉,以避免文件的數(shù)據(jù)丟失等錯(cuò)誤。

正常完成關(guān)閉文件操作時(shí),fclose函數(shù)返回值為0。

如返回非零值則表示有錯(cuò)誤發(fā)生。12.4文件讀寫(xiě)12.4.1字符讀寫(xiě)函數(shù)1.讀字符函數(shù)fgetcfgetc函數(shù)的功能是從指定的文件中讀一個(gè)字符,函數(shù)調(diào)用的形式為:字符變量=fgetc(文件指針);例如:ch=fgetc(fp);其意義是從打開(kāi)的文件fp中讀取一個(gè)字符并送入ch中。對(duì)于fgetc函數(shù)的使用有以下幾點(diǎn)說(shuō)明:(1)在fgetc函數(shù)調(diào)用中,讀取的文件必須是以讀或讀寫(xiě)方式打開(kāi)的。(2)讀取字符的結(jié)果也可以不向字符變量賦值,例如:fgetc(fp);但是讀出的字符不能保存。(3)在文件內(nèi)部有一個(gè)位置指針。用來(lái)指向文件的當(dāng)前讀寫(xiě)字節(jié)。在文件打開(kāi)時(shí),該指針總是指向文件的第一個(gè)字節(jié)。使用fgetc函數(shù)后,該位置指針將向后移動(dòng)一個(gè)字節(jié)。因此可連續(xù)多次使用fgetc函數(shù),讀取多個(gè)字符。應(yīng)注意文件指針和文件內(nèi)部的位置指針不是一回事。文件指針是指向整個(gè)文件的,須在程序中定義說(shuō)明,只要不重新賦值,文件指針的值是不變的。文件內(nèi)部的位置指針用以指示文件內(nèi)部的當(dāng)前讀寫(xiě)位置,每讀寫(xiě)一次,該指針均向后移動(dòng),它不需在程序中定義說(shuō)明,而是由系統(tǒng)自動(dòng)設(shè)置的。2.寫(xiě)字符函數(shù)fputcfputc函數(shù)的功能是把一個(gè)字符寫(xiě)入指定的文件中,函數(shù)調(diào)用的形式為:fputc(字符量,文件指針);其中,待寫(xiě)入的字符量可以是字符常量或變量,例如:fputc('a',fp);其意義是把字符a寫(xiě)入fp所指向的文件中。對(duì)于fputc函數(shù)的使用也要說(shuō)明幾點(diǎn):(1)被寫(xiě)入的文件可以用、寫(xiě)、讀寫(xiě)、追加方式打開(kāi),用寫(xiě)或讀寫(xiě)方式打開(kāi)一個(gè)已存在的文件時(shí)將清除原有的文件內(nèi)容,寫(xiě)入字符從文件首開(kāi)始。如需保留原有文件內(nèi)容,希望寫(xiě)入的字符以文件末開(kāi)始存放,必須以追加方式打開(kāi)文件。被寫(xiě)入的文件若不存在,則創(chuàng)建該文件。(2)每寫(xiě)入一個(gè)字符,文件內(nèi)部位置指針向后移動(dòng)一個(gè)字節(jié)。(3)fputc函數(shù)有一個(gè)返回值,如寫(xiě)入成功則返回寫(xiě)入的字符,否則返回一個(gè)EOF??捎么藖?lái)判斷寫(xiě)入是否成功。12.4.2字符串讀寫(xiě)函數(shù)

1.讀字符串函數(shù)fgets函數(shù)的功能是從指定的文件中讀一個(gè)字符串到字符數(shù)組中。函數(shù)調(diào)用的形式為:fgets(字符數(shù)組名,n,文件指針);

其中的n是一個(gè)正整數(shù)。表示從文件中讀出的字符串不超過(guò)n-1個(gè)字符。

在讀入的最后一個(gè)字符后加上串結(jié)束標(biāo)志'\0'。例如:fgets(str,n,fp);

意義是從fp所指的文件中讀出n-1個(gè)字符送入字符數(shù)組str中。2.寫(xiě)字符串函數(shù)fputsfputs函數(shù)的功能是向指定的文件寫(xiě)入一個(gè)字符串。

其調(diào)用形式為:

fputs(字符串,文件指針)

其中字符串可以是字符串常量,也可以是字符數(shù)組名,或指針變量。

例如:fputs("abcd",fp);其意義是把字符串"abcd"寫(xiě)入fp所指的文件之中。12.4.3數(shù)據(jù)塊讀寫(xiě)函數(shù)

C語(yǔ)言還提供了用于整塊數(shù)據(jù)的讀寫(xiě)函數(shù)??捎脕?lái)讀寫(xiě)一組數(shù)據(jù),如一個(gè)數(shù)組元素,一個(gè)結(jié)構(gòu)變量的值等。讀數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:

fread(buffer,size,count,fp);寫(xiě)數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:

fwrite(buffer,size,count,fp);

其中buffer是一個(gè)指針,在fread函數(shù)中,它表示存放輸入數(shù)據(jù)的首地址。在fwrite函數(shù)中,它表示存放輸出數(shù)據(jù)的首地址。例如:fread(fa,4,5,fp);

其意義是從fp所指的文件中,每次讀4個(gè)字節(jié)(一個(gè)實(shí)數(shù))送入實(shí)數(shù)組fa中,連續(xù)讀5次,即讀5個(gè)實(shí)數(shù)到fa中。12.4.4格式化讀寫(xiě)函數(shù)

fscanf函數(shù),fprintf函數(shù)與前面使用的scanf和printf函數(shù)的功能相似,都是格式化讀寫(xiě)函數(shù)。兩者的區(qū)別在于fscanf函數(shù)和fprintf函數(shù)的讀寫(xiě)對(duì)象不是鍵盤(pán)和顯示器,而是磁盤(pán)文件。這兩個(gè)函數(shù)的調(diào)用格式為:

fscanf(文件指針,格式字符串,輸入表列);

fprintf(文件指針,格式字符串,輸出表列);例如:

fscanf(fp,"%d%s",&i,s);fprintf(fp,"%d%c",j,ch);12.5文件定位文件定位移動(dòng)文件內(nèi)部位置指針的函數(shù)主要有兩個(gè),即rewind函數(shù)和fseek函數(shù)。(1)rewind函數(shù)前面已多次使用過(guò),其調(diào)用形式為:rewind(文件指針);它的功能是把文件內(nèi)部的位置指針移到文件首。12.5.1rewind函數(shù)12.5.2fseek函數(shù)

fseek函數(shù)來(lái)移動(dòng)文件內(nèi)部位置指針。其調(diào)用形式為:

fseek(文件指針,位移量,起始點(diǎn));

其中:“文件指針”指向被移動(dòng)的文件。“位移量”表示移動(dòng)的字節(jié)數(shù),要求位移量是long型數(shù)據(jù),以便在文件長(zhǎng)度大于64KB時(shí)不會(huì)出錯(cuò)。當(dāng)用常量表示位移量時(shí),要求加后綴“L”。“起始點(diǎn)”表示從何處開(kāi)始計(jì)算位移量,規(guī)定的起始點(diǎn)有三種:文件首、當(dāng)前位置和文件尾.

本章小結(jié)

文件是程序設(shè)計(jì)中的一個(gè)重要的概念。數(shù)據(jù)是以文件的形式存放在外部介質(zhì)(如磁盤(pán))上的。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論