版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1,第9章 文件系統(tǒng),2,本章學(xué)習(xí)內(nèi)容,文件的基本知識(shí) C語言中文件的使用方法 文件的打開/關(guān)閉 文件的讀/寫 文件指針的定位 文件出錯(cuò)的檢測,3,本章學(xué)習(xí)目標(biāo),掌握文件的基本知識(shí) 掌握文件類型指針的使用方法 掌握文件打開/關(guān)閉的方法 掌握文件讀/寫的一般方法 了解文件定位 了解文件出錯(cuò)檢測方法,4,1. 文件的基本知識(shí),next part,基本概念: 文件、流 文件的分類,go,go,5,基本概念: 文件、流,return,(1) 文件 (2) 流,如果文件中的數(shù)據(jù)是以字節(jié)為單位順序組織的,則把這類文件稱為流式文件,簡稱流。,6,文件的分類,return,對于流式文件,按照數(shù)據(jù)的存儲(chǔ)形式分:
2、 (1) 文本文件: 每個(gè)字符占一個(gè)字節(jié),以ASC碼存儲(chǔ) (2) 二進(jìn)制文件: 數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣存放到文件中,圖示說明,return,例: int型數(shù) 10000,特點(diǎn): 便于對字符操作;存儲(chǔ)量大、速度慢,特點(diǎn): 存儲(chǔ)量小、速度快、便于存放中間結(jié)果,8,2. C語言中文件的使用方法,next part,C語言中借助文件類型指針和一組標(biāo)準(zhǔn)庫函數(shù)來實(shí)現(xiàn)對文件的操作。,(1) 文件類型FILE (2) 文件類型指針 (3) 說明,go,go,go,9,(1) 文件類型FILE,return, 緩沖文件系統(tǒng)為每個(gè)正使用的文件在內(nèi)存開辟文件信息區(qū) 文件信息用系統(tǒng)定義的FILE類型的結(jié)構(gòu)體變
3、量描述 FILE定義在stdio.h中,結(jié)構(gòu)體類型FILE的定義,typedef struct shortlevel; unsigned flags; charfd; unsigned char hold; shortbsize; unsigned char *buffer; unsigned char *curp; unsignedistemp; shorttoken; FILE;,return,/* fill/empty level of buffer */ /* 文件狀態(tài)標(biāo)志 */ /* 文件描述符 */ /* Ungetc char if no buffer */ /* 緩沖區(qū)大小 *
4、/ /* 數(shù)據(jù)傳輸緩沖區(qū) */ /* 當(dāng)前激活指針 */ /* 臨時(shí)文件指示器 */ /* 用于合法性校合 */,11,(2) 文件類型指針,return,c語言中通過定義文件類型指針來操作文件。具體過程如下: 定義文件類型指針 FILE *fp; 按指定方式打開文件,使fp和文件建立關(guān)聯(lián) 通過fp對文件進(jìn)行讀寫等操作 關(guān)閉文件,斷開fp和文件的關(guān)聯(lián),12,(3) 說明,return,C程序在啟動(dòng)時(shí)會(huì)自動(dòng)創(chuàng)建三個(gè)文件指針,并使之與標(biāo)準(zhǔn)設(shè)備文件建立關(guān)聯(lián): 文件指針stdin 與標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)關(guān)聯(lián) 文件指針stdout 與標(biāo)準(zhǔn)輸出設(shè)備(顯示器)關(guān)聯(lián) 文件指針stderr 與標(biāo)準(zhǔn)輸出設(shè)備(顯示
5、器)關(guān)聯(lián),13,3. 文件的操作,next part,打開/關(guān)閉 讀/寫 定位 錯(cuò)誤檢測,go,go,go,go,14,return,打開/關(guān)閉,(1) fopen() (2) fclose(),函數(shù)原型,函數(shù)原型,實(shí)例,關(guān)閉fp所指向的文件; 若有錯(cuò),返回非0; 否則返回0,return,FILE *fopen( const char *filename, const char *mode );,(1) fopen(),以參數(shù)mode指定的方式打開參數(shù)filename指定的文件。 若成功,返回一個(gè)文件指針,指向該文件;否則,返回NULL(即0),文件打開方式,(2) fclose(),int
6、 fclose( FILE *fp );,調(diào)用時(shí),實(shí)際參數(shù)可以是: 字符串常量、字符數(shù)組名、字符指針,return,P293: 表9-1,return,#include int main() FILE *fp; fp = fopen(roll.xls,w); fclose(fp); return 0; ,if(fp=NULL) printf(cannot open roll.xlsn); exit(0); ,#include ,18,return,讀/寫,(1) fgetc()、fputc() (2) fgets()、fputs() (3) fscanf()、fprintf() (4) fre
7、ad()、fwrite() (5) feof(),go,go,go,go,go,return, fgetc(),int fgetc( FILE *fp );,int fputc( char ch, FILE *fp );,從fp指向的文件中讀取一個(gè)字符。 若讀取成功,則返回讀入的字符的ASC碼; 否則,返回EOF(即-1),將參數(shù)ch中的字符輸出到fp指向的文件。 若成功,則返回該字符的ASC碼; 否則返回EOF(即-1), fputc(),實(shí)例,return,fgetc()和fputc()使用實(shí)例:,例1: 從鍵盤輸入字符存到文件a.txt中, 直到輸入#為止 例2: 把文件a.txt的內(nèi)容
8、顯示到屏幕上 例3: 把文件a.txt的內(nèi)容拷貝到文件b.txt中,go,go,go,return,例1: 從鍵盤輸入字符存到文件a.txt中, 直到輸入#為止,#include #include int main() FILE *fp; char ch; if(fp = fopen(a.txt,w)=NULL) printf(cannot open filen); exit(0); 從鍵盤輸入字符并存入文件a.txt fclose(fp); return 0; ,return,例2: 把文件a.txt的內(nèi)容顯示到屏幕上,#include #include int main() FILE *f
9、p; char ch; if(fp=fopen(a.txt,r)=NULL) printf(cannot open filen); exit(0); 從文件a.txt中讀入內(nèi)容并顯示在屏幕上 fclose(fp); return 0; ,ch = fgetc(fp) ch!=EOF,return,例3: 把文件a.txt的內(nèi)容拷貝到文件b.txt中,#include #include int main() FILE *in, *out; if (in = fopen(a.txt, r)= NULL) printf(Cannot open a.txt.n); exit(0); if (out =
10、 fopen(b.txt, w)= NULL) printf(Cannot open b.txt.n); exit(0); 把文件a.txt拷貝到b.txt fclose(in); fclose(out); return 0; ,return, fgets(), fputs(),char *fgets( char *buf, int n, FILE *fp );,int fputs( char *str, FILE *fp );,從fp指向的文件讀取長度不超過n-1的字符串,存入buf指向的空間 若成功,則返回buf; 否則,返回NULL,將str指向的字符串輸出到fp指向的文件。 若成功,返
11、回0; 否則返回非零,實(shí)參可以是: 字符數(shù)組名、字符指針,實(shí)參可以是: 字符串常量、字符數(shù)組名、字符指針,return, fscanf(), fprintf(),int fscanf( FILE *fp, char *format, arg_list);,int fprintf( FILE *fp, char *format, arg_list );,從fp指向的文件中按format指定的格式讀入數(shù)據(jù)給arg_list。 若讀取成功,返回已輸入的數(shù)據(jù)個(gè)數(shù); 否則,返回0,按format指定的格式把a(bǔ)rg_list的數(shù)據(jù)輸出到fp指向的文件。 若成功,返回輸出數(shù)據(jù)的個(gè)數(shù); 否則返回負(fù)數(shù),實(shí)例,r
12、eturn,例1: 把數(shù)據(jù)寫入文件grade.txt 例2: 從grade.txt中把數(shù)據(jù)讀出來,并在屏幕上顯示,go,go,fscanf()和fprintf()使用實(shí)例:,#include #include int main() FILE *fp; char name=Mike; float score=90; if(fp = fopen(grade.txt,w)=NULL) printf(cannot open grade.txtn); exit(0); fprintf(fp,%st%sn,姓名,分?jǐn)?shù)); fprintf(fp,%st%5.0fn,name,score); fclose(f
13、p); return 0; ,return,return,#include #include int main() FILE *fp; char name10; float score; if( (fp=fopen(grade.txt,r) = NULL) printf(cannot open grade.txtn); exit(0); fscanf(fp,%*s%*s); fscanf(fp,%s%f,name, ,return, fread(), fwrite(),size_t fread( void *pt, size_t size, size_t n, FILE *fp );,size
14、_t fwrite( void *pt, size_t size, size_t n, FILE *fp );,從fp指向的文件中讀取size*n的數(shù)據(jù)項(xiàng),存入pt指向的內(nèi)存區(qū) 若讀取成功,返回所讀數(shù)據(jù)項(xiàng)個(gè)數(shù); 否則,返回-1,將pt指向的連續(xù)n*size個(gè)字節(jié)的數(shù)據(jù)寫入fp指向的文件 返回寫入文件中實(shí)際數(shù)據(jù)項(xiàng)的個(gè)數(shù); 否則,返回-1,實(shí)例,說明: fread和fwrite函數(shù)一般用于二進(jìn)制文件的輸入輸出!,return,float score5; FILE *fp; fp=fopen(aa.dat,rb); fread( score, sizeof(float), 5, fp );,stru
15、ct student int num; char name20; char sex; int age; float score3; struct student stu10; for(i=0;i10;i+) fwrite(,等價(jià)!,31,數(shù)據(jù)塊I/O: fwrite() 和 fread(),fwrite() 調(diào)用形式: fwrite(buffer,size,count,fp); 功能: 把buffer的數(shù)據(jù)寫到fp指向的文件中 fread() 調(diào)用形式: fread(buffer,size,count,fp); 功能: 從fp指向的文件中讀入數(shù)據(jù)到buffer,size: 每個(gè)數(shù)據(jù)項(xiàng)占用的字節(jié)
16、數(shù) count: 數(shù)據(jù)項(xiàng)的個(gè)數(shù),return,說明: fread和fwrite函數(shù)一般用于二進(jìn)制文件的輸入輸出!,return,(5) feof(),int feof( FILE *fp );,檢查fp指向的文件是否結(jié)束。 若文件結(jié)束則返回非0值; 否則,返回0,33,return,定位,(1) rewind() (2) fseek() (3) ftell(),go,go,go,說明: 在FILE中有一個(gè)數(shù)據(jù)成員為位置指針,指向當(dāng)前讀寫位置,return,(1) rewind(),void rewind( FILE *fp );,將fp指示的文件中的位置指針置于文件開頭位置,實(shí)例,#inclu
17、de #include int main() FILE *fp; fp = fopen(a.txt,r); if(fp=NULL) printf(cannot open a.txtn); exit(0); while(!feof(fp) putchar(fgetc(fp); rewind(fp); while(!feof(fp) putchar(fgetc(fp); fclose(fp); return 0; ,return,return,(2) fseek(),int fseek( FILE *fp, long offset, int base );,將fp指示的文件中的位置指針移到以bas
18、e所給出的位置為基準(zhǔn)、以offset為位移量的位置 若成功返回當(dāng)前位置; 否則, 返回-1,SEEK_SET 或 0 SEEK_CUR 或 1 SEEK_END 或 2, fseek(fp,100L,SEEK_SET); fseek(fp,0L,SEEK_END);,把文件指針移到距離文件頭100個(gè)字節(jié)處,表示: 把文件指針移到文件末尾,return,(3) ftell(),long ftell( FILE *fp );,返回fp所指向的文件的位置指針的當(dāng)前值,實(shí)例,return,例: 求文件的長度,#include #include int main() FILE *fp; int length; if(fp = fopen(aa.txt,r)=NULL) printf(cannot open roll.xlsn); exit(0); fseek(fp,0L,SEEK_END); length = ftell(fp); printf(length of file is %dn,length); fclose(fp); return 0; ,39,return,錯(cuò)誤檢測,(1) ferror() (
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化妝用刮板市場需求與消費(fèi)特點(diǎn)分析
- 玩具鐘琴產(chǎn)品供應(yīng)鏈分析
- 英語新學(xué)期教學(xué)工作計(jì)劃5篇
- 紅霉素制劑相關(guān)項(xiàng)目實(shí)施方案
- 家用縫紉機(jī)市場需求與消費(fèi)特點(diǎn)分析
- 嬰兒安撫奶嘴用帶鏈夾產(chǎn)業(yè)運(yùn)行及前景預(yù)測報(bào)告
- 高中入學(xué)軍訓(xùn)心得體會(huì)800字左右范文5篇2024
- 大班幼兒實(shí)習(xí)教育心得十篇
- 傳真機(jī)市場需求與消費(fèi)特點(diǎn)分析
- 電動(dòng)理發(fā)器產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 英語四級(jí)高頻詞匯大全帶例句
- 單產(chǎn)品動(dòng)態(tài)盈虧平衡表
- 盤古開天地“智慧課堂”展示課教學(xué)設(shè)計(jì)
- MRI設(shè)備詳細(xì)介紹講課稿
- SPSS主成分分析和因子分析課件(PPT 69頁)
- 高溫合金行業(yè)報(bào)告:變形高溫合金、鑄造高溫合金、粉末高溫合金
- 地鐵屏蔽門設(shè)計(jì)_論文
- IPC77117721電子組件的返工維修和修改教程課件
- 交貨實(shí)施方案
- 新《行政處罰法》修訂要點(diǎn)解讀PPT課件
- 第七章:化學(xué)動(dòng)力學(xué)(物理化學(xué))
評論
0/150
提交評論