![C語言程序設(shè)計(jì)教學(xué)課件:第11章 文件_第1頁](http://file4.renrendoc.com/view/e6a16928c86ebcc28d914e67679c1ba2/e6a16928c86ebcc28d914e67679c1ba21.gif)
![C語言程序設(shè)計(jì)教學(xué)課件:第11章 文件_第2頁](http://file4.renrendoc.com/view/e6a16928c86ebcc28d914e67679c1ba2/e6a16928c86ebcc28d914e67679c1ba22.gif)
![C語言程序設(shè)計(jì)教學(xué)課件:第11章 文件_第3頁](http://file4.renrendoc.com/view/e6a16928c86ebcc28d914e67679c1ba2/e6a16928c86ebcc28d914e67679c1ba23.gif)
![C語言程序設(shè)計(jì)教學(xué)課件:第11章 文件_第4頁](http://file4.renrendoc.com/view/e6a16928c86ebcc28d914e67679c1ba2/e6a16928c86ebcc28d914e67679c1ba24.gif)
![C語言程序設(shè)計(jì)教學(xué)課件:第11章 文件_第5頁](http://file4.renrendoc.com/view/e6a16928c86ebcc28d914e67679c1ba2/e6a16928c86ebcc28d914e67679c1ba25.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、共 29 頁 第 1 頁第十一章文 件C語言程序設(shè)計(jì)共 29 頁 第 2 頁本 章 要 點(diǎn)掌握文件類型指針 (FILE類型指針)掌握文件的打開與關(guān)閉 (fopen, fclose)掌握文件的讀寫共 29 頁 第 3 頁11.1 C文件概述1.定義: 文件是指存儲在外部介質(zhì)上數(shù)據(jù)的集合。操作系統(tǒng)是以文件為單位對數(shù)據(jù)進(jìn)行管理的。每一個與主機(jī)相連的輸入或輸出設(shè)備都看作是一個文件。2.組織形式: 按照文件的存儲的編碼形式分為兩類ASCII碼(文本)文件:文件的每一個字節(jié)放一個ASCII代碼,代表一個字符。二進(jìn)制文件:把內(nèi)存中的數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣輸出到磁盤文件上。3. 邏輯結(jié)構(gòu): 從文件的邏
2、輯結(jié)構(gòu)把文件看做數(shù)據(jù)流字符(字節(jié))序列:由一個個字符(字節(jié))的數(shù)據(jù)順序組成,對文件的存取是以字符(字節(jié))為單位,稱為字符流。二進(jìn)制流共 29 頁 第 4 頁4. 輸入輸出方式緩沖文件系統(tǒng): 由于系統(tǒng)對從磁盤文件數(shù)據(jù)的存取速度與內(nèi)存數(shù)據(jù)存取訪問的速度不同,文件數(shù)據(jù)量較大,數(shù)據(jù)的讀寫不可能瞬間完成。為了提高數(shù)據(jù)存取速度,C程序?qū)ξ募奶幚聿捎镁彌_文件系統(tǒng)方式進(jìn)行。要求程序與文件之間有一個內(nèi)存緩沖區(qū),程序與文件的數(shù)據(jù)交換通過緩沖區(qū)進(jìn)行。緩沖區(qū)的大小由C系統(tǒng)決定。 系統(tǒng)自動為每一個文件分配一個內(nèi)存緩沖區(qū),當(dāng)程序要向磁盤文件寫入數(shù)據(jù) ,必須先送到緩沖區(qū),由操作系統(tǒng)把緩沖區(qū)的數(shù)據(jù)存入磁盤。從文件向內(nèi)存讀入
3、數(shù)據(jù),先由操作系統(tǒng)把數(shù)據(jù)讀入緩沖區(qū),然后程序?qū)?shù)據(jù)從緩沖區(qū)讀入內(nèi)存。 共 29 頁 第 5 頁非緩沖文件系統(tǒng): 系統(tǒng)不自動開辟確定大小的緩沖區(qū),而由程序?yàn)槊總€文件設(shè)定緩沖區(qū)。 不同的操作系統(tǒng)對文件的處理采用不同的方式,UNIX用緩沖文件系統(tǒng)處理文本文件,用非緩沖系統(tǒng)處理二進(jìn)制文件。標(biāo)準(zhǔn)C只采用緩沖文件系統(tǒng)。共 29 頁 第 6 頁 C程序?qū)ξ募乃胁僮魍ㄟ^對文件緩沖區(qū)的操作來完成。對文件的讀寫操作通過庫函數(shù)實(shí)現(xiàn)。程序要處理文件時(shí),只需要跟內(nèi)存緩沖區(qū)打交道,而不必考慮外部磁盤的特性。程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)磁盤操作系統(tǒng)自動完成程序控制共 29 頁 第 7 頁11.2 文件類型指針
4、結(jié)構(gòu)體類型 FILE 每個被使用的文件都在內(nèi)存中開辟一個區(qū)域,用來存放文件的有關(guān)信息(如文件名,狀態(tài),當(dāng)前位置等)。這些信息保存在一個結(jié)構(gòu)體類型的變量中。定義:緩沖文件系統(tǒng)中,獲取內(nèi)存中存放文件有關(guān)信息的結(jié)構(gòu)體的指針定義為文件類型指針。通過文件指針變量能找到指定的文件,以實(shí)現(xiàn)對文件的訪問。共 29 頁 第 8 頁對文件操作的相關(guān)信息的結(jié)構(gòu)體類型由系統(tǒng)定義為“FILE”,包含在 stdio.h文件中:如typedef struct int _fd;; /* 文件號 */ int _cleft; /* 緩沖區(qū)中剩下的字符 */ int _mode; /* 文件操作模式 */ char *_next
5、tc; /* 下一個字符位置 */ char *_buff; /* 文件緩沖區(qū)位置 */ FILE;共 29 頁 第 9 頁例:定義一個文件指針變量FILE *fp;fp是一個指向FILE結(jié)構(gòu)體類型的指針變量??梢允?fp指向某一個具體文件的結(jié)構(gòu)體變量,通過讀取該結(jié)構(gòu)體變量中的有關(guān)信息來實(shí)現(xiàn)對文件的訪問和操作。也就是通過fp 指定要被訪問的文件。提示:文件操作具有順序性,文件指針不能進(jìn)行fp+或fp操作,前一個數(shù)據(jù)取出后,下一次將順序取后一個數(shù)據(jù)。共 29 頁 第 10 頁文件的一般操作過程 打開文件 建立用戶程序與文件的聯(lián)系 操作文件 對文件進(jìn)行讀、寫、追加等操作 關(guān)閉文件 切斷文件與程序的
6、聯(lián)系共 29 頁 第 11 頁11.3 文件的打開與關(guān)閉11.3.1 文件的打開(函數(shù) fopen)功能:在對文件讀寫之前打開文件。調(diào)用方式: FILE *fp; fp=fopen(文件名,使用文件方式);返回值:指定文件的指針,若失敗返回 NULL三要素:文件指針,文件名,使用方式例:fp=fopen(“m1”,”r”); fp=fopen(“e:mydata.dat”,”r”);表示打開名為m1的文件,使用方式為“讀入”.提示:文件名和打開方式都是字符串,一般要指出文件存放的路徑,不指出路徑則默認(rèn)與當(dāng)前程序的路徑相同。共 29 頁 第 12 頁文件使用方式共 29 頁 第 13 頁文件使用
7、方式共 29 頁 第 14 頁 進(jìn)行文件讀寫的一般規(guī)則1. 讀文件 指定的文件必須存在,否則出錯;2. 寫文件(指定的文件可以存在,也可以不存在) (1)以“w”方式寫: if該文件已經(jīng)存在 原文件將被刪去然后重新建立; else 按指定的名字新建一個文件; (2)以“a”方式寫: if該文件已經(jīng)存在 寫入的數(shù)據(jù)附加在原數(shù)據(jù)后邊; else 按指定的名字新建一個文件(與“w”相同); (3)文件同時(shí)讀和寫: 使用“r+”、“w+”、“ a+”打開文件。共 29 頁 第 15 頁11.3.2 文件的關(guān)閉(函數(shù) fclose)功能:使用文件之后關(guān)閉文件。使文件指針變量不再指向該文件。調(diào)用方式: f
8、close(文件指針);返回值:關(guān)閉成功返回 0,若失敗返回 非零值。例: fclose (fp); 在程序結(jié)束之前關(guān)閉所有使用的文件,如果不關(guān)閉文件可能會丟失數(shù)據(jù)。用fclose關(guān)閉文件,將緩沖區(qū)的數(shù)據(jù)輸出到磁盤后再釋放文件指針變量,可避免數(shù)據(jù)丟失。共 29 頁 第 16 頁11.4 文件的讀寫11.4.1 格式化讀寫函數(shù) fscanf 功能:將指定磁盤文件格式化賦給指定對象。 fprintf 功能:將指定對象格式化輸出到指定磁盤文件上。格式: fprintf (文件指針,格式字符串,輸出表列) fscanf (文件指針,格式字符串,輸入表列)例:fscanf(fp,”%d,%f”,&i,&
9、a); 從fp所指向的文件中,取出數(shù)據(jù)賦給i和a. fprintf(fp,”%d,%f”,a,b); 將a和b的值按指定格式寫入到fp所指向的文件中。共 29 頁 第 17 頁例1: 將兩個變量的數(shù)值寫入test.txt 。# include “stdio.h”main( )FILE *fp;int i=3; float t=4.5;if (fp=fopen(“test.txt”, “w”) = NULL) printf (“file open failed”); exit(0); fprintf(fp,”%d, %6.2f”,i, t );fclose (fp);運(yùn)行結(jié)果:test.txt
10、的內(nèi)容是3,4.50定義文件指針變量寫入i, t 關(guān)閉文件共 29 頁 第 18 頁11.4.2 fputc函數(shù)和fgetc函數(shù)fputc 功能: 把一個字符寫到fp所指向的磁盤文件中。 格式: fputc(ch , fp);文件類型指針變量要輸出的字符 fgetc 功能:從指定磁盤文件讀出一個字符,該文件必須 是以讀或讀寫的方式打開的。 格式:ch=fgetc(fp); 文件類型指針變量字符變量若讀到文件尾結(jié)束符時(shí),函數(shù)返回一個文件結(jié)束標(biāo)志EOF(值為-1)??捎胒eof(fp)處理文件是否結(jié)束,為1結(jié)束,否則為0。 若寫成功,函數(shù)返回該字符,否則返回一個文件結(jié)束標(biāo)志EOF(值為-1)。共
11、29 頁 第 19 頁11.4.3 fread函數(shù)和fwrite函數(shù)fread 功能:從指定磁盤文件讀入一組數(shù)據(jù)。 格式: fread(buffer, size, count, fp);要讀寫的字節(jié)數(shù)指針,即讀入數(shù)據(jù)的存放地址文件類型指針變量要進(jìn)行讀寫多少個size字節(jié)的數(shù)據(jù)項(xiàng)例:int a3, FILE *fp= fopen (.); fread(a,4,3,fp); a數(shù)組名,從fp所指向的文件中讀出3次數(shù)據(jù),每次4個字節(jié),存入a數(shù)組中。共 29 頁 第 20 頁 fwrite 功能:把一組數(shù)據(jù)寫到指定磁盤文件上。 格式: fwrite(buffer,size,count, fp);fre
12、ad()、fwrite()用于讀寫數(shù)據(jù)塊(指定字節(jié)數(shù)量,如一個數(shù)組元素、一個結(jié)構(gòu)變量的值等。多用于讀寫二進(jìn)制文件。 例:int a3; FILE *fp= fopen (.); fwrite(a,4,3,fp); a數(shù)組名,從a數(shù)組中中讀出3次數(shù)據(jù),每次4個字節(jié),存入fp所指向的文件。共 29 頁 第 21 頁例如:假設(shè)學(xué)生的數(shù)據(jù)已存放在磁盤文件中,可用以下for語句和fread函數(shù)讀入40個學(xué)生的數(shù)據(jù)。for(i=0; i40; i+) fread(&studi, sizeof(struct student_type), 1, fp);可用以下的for語句和fwrite函數(shù)將內(nèi)存中40個學(xué)生
13、的數(shù)據(jù)輸出到磁盤文件中去。for(i=0; i40; i+) fwrite(&studi,sizeof(struct student_type), 1,fp);共 29 頁 第 22 頁11.4.4 fgets函數(shù)和fputs函數(shù)fgets 功能: 從文件讀入一個指定的字符串到內(nèi)存中。 例: fgets(str,n,fp); 從fp指向的文件讀出一個具有n-1個字符的字符串,存入其始地址為str的內(nèi)存中.fputs 功能:將指定的字符串輸出到fp所指向的文件中. fputs(str,fp);共 29 頁 第 23 頁檢測文件指針函數(shù): feof()調(diào)用一般形式: feof(fp);功能:檢測文
14、件指針是否到文件尾,若到文件尾,函數(shù)值為真(非0),否則為假。exit(0):系統(tǒng)標(biāo)準(zhǔn)函數(shù),作用是關(guān)閉所有打開的文件,并終止程序的執(zhí)行。參數(shù)0表示程序正常結(jié)束,非0參數(shù)通常表示不正常的程序結(jié)束。共 29 頁 第 24 頁例2:將一個磁盤文件中的信息復(fù)制到另一個磁盤文件中。#include “stdio.h”main( ) FILE *in, *out;char ch,infile10,outfile10;printf(“%Enter the infile name:n”);scanf(“%s”, infile);printf(“Enter the outfile name: n);scanf(
15、“%s”, outfile);共 29 頁 第 25 頁if(in=fopen(infile, “r”)=NULL) printf(“cannot open infilen”); exit(0); if(out=fopen(outfile,”w”)=NULL) printf(“cannot open infilen”); exit(0); while(!feof(in) fputc(fgetc(in), out);fclose(in);fclose(out);值為1數(shù)據(jù)讀取結(jié)束在while循環(huán)中,只要!feof(in)為真,說明in還沒有指到文件尾共 29 頁 第 26 頁 例3:已有文本文件
16、test.txt,內(nèi)容為Hello,everyone!,以下程序中文件test.txt已正確為讀而打開,由文件指針fr指向該文件,則程序輸出結(jié)果為_.#include main() FILE *fr;char str40; fgets(str,5,fr); printf(%sn,str); fclose(fr); Hell從fr指向的文件讀出一個具有5-1個字符的字符串,存入起始地址為str的內(nèi)存中.共 29 頁 第 27 頁文件編程綜合示例: 現(xiàn)有某學(xué)院2009級8班的三十名學(xué)生的成績數(shù)據(jù)(包括學(xué)號,姓名,三門課成績,平均成績), 存放在data08.txt文件中。編寫程序從文件讀入以上數(shù)據(jù)
17、,計(jì)算出每名學(xué)生的平均成績,再將成績數(shù)據(jù)存放在data08_a.txt文件中。 共 29 頁 第 28 頁#include stdio.hstruct student long num; char name8; int score3; float avr; stu30;main()int i,j,sum;FILE *fp1;/*讀文件*/if(fp1=fopen(“data08.txt, r)=NULL) printf(Cannot open file!); return 0;for(i=0;i30;i+)fscanf(fp1,%ld%s%d%d%d,&stui.num,,&stui.score0,&stui.score1,&stui.score2);共 29 頁 第 29 頁/*計(jì)算*/for(i=0;i
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 靜海區(qū)輕鋼房施工方案
- 外架三面架施工方案
- 問題產(chǎn)品退貨方案
- 石膏砂漿抹灰施工方案
- 鎮(zhèn)江室內(nèi)塑膠跑道施工方案
- 勞務(wù)合同范例裝修
- 個人車間裝修合同范本
- 個人租房電子合同范本
- 賣塑料廢品合同范例
- 個人承諾合同范例
- 江蘇省南京鼓樓區(qū)2024年中考聯(lián)考英語試題含答案
- 人輪狀病毒感染
- 兒科護(hù)理學(xué)試題及答案解析-神經(jīng)系統(tǒng)疾病患兒的護(hù)理(二)
- 《石油產(chǎn)品分析》課件-車用汽油
- 15篇文章包含英語四級所有詞匯
- 王陽明心學(xué)完整版本
- 四年級上冊豎式計(jì)算300題及答案
- 保潔班長演講稿
- 課題研究實(shí)施方案 范例及課題研究方法及技術(shù)路線圖模板
- 牙髓炎中牙髓干細(xì)胞與神經(jīng)支配的相互作用
- 勞務(wù)雇傭協(xié)議書范本
評論
0/150
提交評論