遼師大版信息技術(shù)九年《文件操作》課件_第1頁
遼師大版信息技術(shù)九年《文件操作》課件_第2頁
遼師大版信息技術(shù)九年《文件操作》課件_第3頁
遼師大版信息技術(shù)九年《文件操作》課件_第4頁
遼師大版信息技術(shù)九年《文件操作》課件_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C文件操作主要內(nèi)容13.1 文件概述13.2 文件類型指針13.3 文件的打開與關(guān)閉13.4 文件的讀寫13.5 文件的定位13.6 習(xí)題13.1 文件的概述文件的概念指存儲在外部介質(zhì)(如磁盤等)邏輯上有聯(lián)系的數(shù)據(jù)的有序集合。分類:從用戶的角度看,分為普通文件和設(shè)備文件兩種。 按數(shù)據(jù)存儲方式,分為:文本文件和二進(jìn)制文件。13.1 文件的概述普通文件:一般指源文件、目標(biāo)文件、可執(zhí)行文件;也可以是一組待輸入處理的原始數(shù)據(jù),或者是一組輸出的結(jié)果。對于源文件、目標(biāo)文件、可執(zhí)行程序可以稱作程序文件,對輸入輸出數(shù)據(jù)可稱作數(shù)據(jù)文件。數(shù)據(jù)文件:用戶數(shù)據(jù)。如未做特殊說明,本章中的文件指的是數(shù)據(jù)文件。設(shè)備文件:是

2、指與主機相聯(lián)的各種外部設(shè)備,如顯示器、打印機、鍵盤等。在操作系統(tǒng)中,把外部設(shè)備也看作是一個文件來進(jìn)行管理,把它們的輸入、輸出等同于對磁盤文件的讀和寫。 通常把顯示器定義為標(biāo)準(zhǔn)輸出文件,在屏幕上顯示信息就是向標(biāo)準(zhǔn)輸出文件輸出信息。13.1 文件的概述文本文件:也稱為ASCII文件,這種文件在磁盤中存放時每個字符占用一個字節(jié),用于存放對應(yīng)的ASCII碼。十進(jìn)制數(shù)5678,在內(nèi)存中的存儲形式為00010110 00101110(二進(jìn)制形式),只占2個字節(jié),如果按ASCII形式輸出,則占4個字節(jié)。二進(jìn)制文件是按二進(jìn)制的編碼方式來存放文件的。13.1 文件的概述緩沖文件系統(tǒng)文件中的數(shù)據(jù)是從內(nèi)存中傳送到外

3、部介質(zhì)中的,緩沖文件系統(tǒng)自動在內(nèi)存區(qū)開辟一個緩沖區(qū),使數(shù)據(jù)輸入輸出都先放到緩沖區(qū),等緩沖區(qū)放滿時,再輸出到設(shè)備上。13.1 文件的概述非緩沖文件系統(tǒng)系統(tǒng)不自動開辟確定大小的緩沖區(qū),而是由程序員為每個文件設(shè)定一個緩沖區(qū)。新的ANSI C標(biāo)準(zhǔn)不提倡使用“非緩沖文件系統(tǒng)”。注意不要在同一個程序內(nèi)混合使用這兩種文件的處理方法。因為它們調(diào)用文件的方式不同,有可能相互干擾。由于C對文件的操作是字節(jié),所以可以每次讀/寫1個字節(jié),則讀/寫512個字節(jié)就需要512次啟動外設(shè)的讀寫操作;但是,緩沖文件系統(tǒng)先將要讀/寫的數(shù)據(jù)放入緩沖區(qū),裝滿了以后再啟動外部設(shè)備的讀/寫操作。因此,讀/寫512字節(jié),只需要啟動一次外設(shè)

4、,而不是512次。13.2 文件類型指針文件類型指針是指向描述文件信息結(jié)構(gòu)體的結(jié)構(gòu)體變量,用于文件操作。在C語言中,對普通數(shù)據(jù)文件的所有操作都必須依靠文件類型指針來完成。要想對文件進(jìn)行操作,首先必須將想要操作的數(shù)據(jù)文件與文件指針建立聯(lián)系,然后通過這些文件指針來操作相應(yīng)的文件。C語言程序可同時處理多個文件,為了對每個文件進(jìn)行有效的管理,就需要開辟一個“文件信息描述區(qū)”,記錄文件的當(dāng)前狀態(tài)(文件名、文件大小等)。該信息描述區(qū)是用一個結(jié)構(gòu)變量來命名和記錄實現(xiàn)的。該結(jié)構(gòu)變量名叫文件結(jié)構(gòu)變量。文件結(jié)構(gòu)變量的類型由系統(tǒng)定義,并取名為FILE。它通常被存放在頭文件中。13.2 文件類型指針每一個要操作的文件

5、,都必須定義一個指針變量,并使它指向該文件結(jié)構(gòu)變量,該指針叫文件類型指針。于是可通過該指針找到被操作文件的描述信息,進(jìn)而對其進(jìn)行讀寫。FILE 結(jié)構(gòu)類型的格式,各個編譯系統(tǒng)有微小的區(qū)別,大致如下:typedef struct short level; /*緩沖區(qū)“滿”或“空”的程度 */ unsigned int flags; /* 文件代號*/ char fd; /* 文件描述符*/ unsigned char hold; /* 如無緩沖區(qū)不讀取字符*/ short bsize; /*緩沖區(qū)的大小*/ unsigned char *buffer; /*數(shù)據(jù)緩沖區(qū)首地址*/ unsigned

6、char *curp; /* 指針當(dāng)前位置(下一個待處理字節(jié)地址)*/ unsigned int istemp; /* 臨時文件指示器*/ short token; /* 用于有效性檢查*/ FILE; /* 自定義的類型名*/13.2 文件類型指針定義說明文件指針格式FILE* 指針變量標(biāo)識符;例如:FILE *fp;表示fp是指向FILE結(jié)構(gòu)的指針變量,通過fp即可找存放某個文件信息的結(jié)構(gòu)變量,然后按結(jié)構(gòu)變量提供的信息找到該文件,實施對文件的操作。13.3 文件的打開與關(guān)閉C語言程序中,文件在進(jìn)行讀/寫操作之前要先打開,使用完畢要關(guān)閉。打開文件實際上是建立文件的各種有關(guān)信息,并使文件指針指

7、向該文件,以便進(jìn)行其它操作。關(guān)閉文件斷開指針與文件之間的聯(lián)系,也就禁止再對該文件進(jìn)行操作。13.3 文件的打開與關(guān)閉文件打開函數(shù)fopen函數(shù)原型FILE *fopen(char *filename,char *mode);參數(shù)說明filename:要打開的文件路徑mode :打開模式返回值若成功,返回指向被打開文件的指針若出錯,返回空指針NULL(0)13.3 文件的打開與關(guān)閉文件的打開模式打開模式描 述r只讀,打開已有文件,不能寫w只寫,創(chuàng)建或打開,覆蓋已有文件a追加,創(chuàng)建或打開,在已有文件末尾追加r+讀寫,打開已有文件w+讀寫,創(chuàng)建或打開,覆蓋已有文件a+讀寫,創(chuàng)建或打開,在已有文件末尾

8、追加t按文本方式打開 (缺省)b按二進(jìn)制方式打開13.3 文件的打開與關(guān)閉文件的打開舉例FILE *fp1, *fp2, *fp3;char filename =file3.dat; /* 以文本只讀方式打開file1 */if (!(fp1=fopen(file1, r) printf(Cannot Open This File!n); exit(0); /* 退出程序 */ fp2=fopen(C:HOMEFILE2.TXT, rb+); /* 以二進(jìn)制讀寫方式打開FILE2.TXT */fp3=fopen(filename, a+b); /* 以二進(jìn)制讀寫方式打開file3.dat */

9、13.3 文件的打開與關(guān)閉文件關(guān)閉函數(shù) (fclose)函數(shù)原型int fclose(FILE *fp);參數(shù)說明fp:要關(guān)閉的文件指針返回值若成功,返回0若出錯,返回EOF(-1)不用的文件應(yīng)必須關(guān)閉,防止數(shù)據(jù)破壞丟失13.3 文件的打開與關(guān)閉文件的關(guān)閉舉例FILE *fp;char file=D:USERSTUDENTS.DAT;if (!(fp=fopen(file, rb+) printf(Open file %s error!n, file); exit(0); . .fclose(fp);13.3 文件的打開與關(guān)閉C語言程序中,文件操作順序為:打開讀/寫關(guān)閉。文件操作程序的編寫分以

10、下幾步:定義文件指針;打開文件,并判斷是否成功打開,若打開文件失敗,程序退出運行狀態(tài);對文件進(jìn)行讀寫等操作;關(guān)閉文件。13.4 文件的讀寫文件的讀寫函數(shù)函數(shù)功能函數(shù)功能fputc輸出字符fprintf格式化輸出fgetc輸入字符fscanf格式化輸入putc輸出字符putw輸出一個字getc輸入字符getw輸入一個字fwrite輸出數(shù)據(jù)塊fputs輸出字符串fread輸入數(shù)據(jù)塊fgets輸入字符串13.4 文件的讀寫feof函數(shù)函數(shù)原型int feof(FILE *fp);參數(shù)fp:文件指針返回值若文件結(jié)束,返回非零值若文件尚未結(jié)束,返回013.4 文件的讀寫fputc/putc函數(shù)函數(shù)原型i

11、nt fputc(int c, FILE *fp);int putc(int c, FILE *fp);參數(shù)c :要輸出到文件的字符fp:文件指針返回值若成功,返回輸出的字符若失敗,返回EOF13.4 文件的讀寫fgetc/getc函數(shù)函數(shù)原型int fgetc(FILE *fp);int getc(FILE *fp);參數(shù)fp:文件指針返回值若成功,返回輸入的字符若失敗或文件結(jié)束,返回EOF13.4 文件的讀寫舉例:將file_in.txt的文件內(nèi)容讀出并寫入到file_out.txt文件中#include void main() FILE *fp1, *fp2; char c; fp1 =

12、 fopen(file_in.txt, r); fp2 = fopen(file_out.txt, w); while(!feof(fp1) c = fgetc(fp1); fputc(c, fp2); fclose(fp1); fclose(fp2);13.4 文件的讀寫fwrite和fread函數(shù)函數(shù)原型size_t fwrite(void *buffer, size_t size, size_t count, FILE *fp);size_t fread (void *buffer, size_t size, size_t count, FILE *fp);參數(shù)buffer:要讀/寫的數(shù)

13、據(jù)塊地址size :要讀/寫的每個數(shù)據(jù)項的字節(jié)數(shù)count :要讀/寫的數(shù)據(jù)項數(shù)量fp :文件指針返回值若成功,返回實際讀/寫的數(shù)據(jù)項數(shù)量若失敗,一般返回013.4 文件的讀寫fwrite和fread函數(shù)舉例#includestruct student int no,age; st;void main() int i; FILE *fp; fp=fopen(c:rr.dat,wb); for(i=0;i3;i+) scanf(%d,%d, &st.no,&st.age); fwrite(&st,sizeof(st),1,fp); fclose(fp); fp=fopen(c:rr.dat,rb

14、); while(!feof(fp) fread(&st,sizeof(st),1,fp); if(!feof(fp)printf(no:%d,age,%dn,st.no,st.age); fclose(fp);13.4 文件的讀寫fprintf和fscanf函數(shù)函數(shù)原型int fscanf(FILE *fp, char *format,address,.);int fprintf(FILE *fp,char *format,argument,.);說明與printf和scanf函數(shù)類似從文件輸入或輸出到文件13.4 文件的讀寫putw函數(shù)函數(shù)原型int putw(int w, FILE *f

15、p);參數(shù)w :要輸出到文件的整數(shù)(字)fp:文件指針返回值若成功,返回輸出的整數(shù)(字)若失敗,返回EOF13.4 文件的讀寫getw函數(shù)函數(shù)原型int getw(FILE *fp);參數(shù)fp:文件指針返回值若成功,返回輸入的整數(shù)(字)若失敗,返回EOF13.4 文件的讀寫fputs函數(shù)函數(shù)原型int fputs(char *s, FILE *fp);返回值若成功,返回輸出字符個數(shù)(或最后的字符)若失敗,返回EOF說明字符串的結(jié)束標(biāo)志0不會輸出到文件也不會在字符串末尾自動添加換行符13.4 文件的讀寫fgets函數(shù)函數(shù)原型char *fgets(char *s, int n, FILE *fp

16、);返回值若成功,返回s首地址;若失敗,返回NULL說明從fp輸入字符串到s中輸入n-1個字符,或遇到換行符或EOF為止讀完后自動在字符串末尾添加013.5 文件的定位文件位置指針位置指針指向當(dāng)前讀寫的位置每次讀寫文件,位置指針都會相應(yīng)移動可以通過相關(guān)函數(shù)強制修改位置指針相關(guān)函數(shù)rewind函數(shù)fseek函數(shù)ftell函數(shù)13.5 文件的定位正常讀寫過程中,文件指針自動下移,移到下一次應(yīng)讀寫的位置。也可以使用文件指針移動函數(shù), 人為移動文件指針:void rewind(FILE *fp) /使文件指針指向文件開頭int fseek(FILE +fp,long offset,int base); /從base移動offset個字節(jié),正值向后移,負(fù)值向前移,移動成功返回1,否則返回非0base值可選項: SEEK_SET(文件頭)SEEK_CUR(當(dāng)前指針位置)SEEK_END(文件尾)輔助函數(shù):long ftell(FILE *fp);獲得文件指針當(dāng)前位置13.5 文件的定位rewind函數(shù)函數(shù)原型void rewind(FILE *fp);參數(shù)fp:文件指針功能使文件位置指針重新返回文件開頭13.5 文件的定位fseek函數(shù)函數(shù)原型:int fseek(FILE *fp, long offset,in

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論