




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、P283 9 文件文件此文件不是指此文件不是指C源程序、意圖程序、源程序、意圖程序、可履行程序等文件可履行程序等文件(一一) 文件概述文件概述一一.文件文件:存放在外存儲(chǔ)器上的信息集存放在外存儲(chǔ)器上的信息集合合(一個(gè)信息序列或一連串的信息一個(gè)信息序列或一連串的信息),另為編程方便、把外部設(shè)備另為編程方便、把外部設(shè)備(例鍵盤、例鍵盤、表現(xiàn)器、打印機(jī)等表現(xiàn)器、打印機(jī)等)也當(dāng)作一個(gè)文件也當(dāng)作一個(gè)文件來履行經(jīng)管來履行經(jīng)管注重注重:1.文件由一個(gè)一個(gè)字符文件由一個(gè)一個(gè)字符(或字節(jié)或字節(jié))次序組次序組成成(也能夠信任文件是一個(gè)接連的字符也能夠信任文件是一個(gè)接連的字符串或字節(jié)串串或字節(jié)串).2.存取文件中信
2、息是以字符存取文件中信息是以字符(或字節(jié)或字節(jié))為為單位履行的單位履行的(由我們設(shè)計(jì)的由我們設(shè)計(jì)的C程序完成程序完成).3.存取信息的最先和結(jié)束僅受存取信息的最先和結(jié)束僅受C程序操程序操縱、而不受文件中內(nèi)容操縱縱、而不受文件中內(nèi)容操縱.二、依照文件中信息的組織形式分類二、依照文件中信息的組織形式分類:ASCII文件文件(又稱為文本文件又稱為文本文件): 其中內(nèi)容為字符序列其中內(nèi)容為字符序列,其形式似程其形式似程序的運(yùn)行結(jié)論或從鍵盤輸入的信息序的運(yùn)行結(jié)論或從鍵盤輸入的信息.每一個(gè)字節(jié)存放一個(gè)字符每一個(gè)字節(jié)存放一個(gè)字符(存放其存放其ASCII代碼代碼).二進(jìn)制文件二進(jìn)制文件: 把內(nèi)存中的信息按其在
3、內(nèi)存中的存把內(nèi)存中的信息按其在內(nèi)存中的存儲(chǔ)形式原樣輸出到磁盤上保留儲(chǔ)形式原樣輸出到磁盤上保留,其中其中內(nèi)容為字節(jié)序列內(nèi)容為字節(jié)序列,其形式同內(nèi)存其形式同內(nèi)存 例例:整數(shù)整數(shù)10000 在內(nèi)存中的存儲(chǔ)形式為在內(nèi)存中的存儲(chǔ)形式為: 0010011100010000在二進(jìn)制文件中的存儲(chǔ)形式為在二進(jìn)制文件中的存儲(chǔ)形式為: 0010011100010000在在ASCII文件中的存儲(chǔ)形式為文件中的存儲(chǔ)形式為 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 0 00110000 00110000 00110000 ”1”的的ASCII碼碼 ”0”的的ASCII碼碼例例:整數(shù)整數(shù)-10000 在內(nèi)
4、存中的存儲(chǔ)形式為在內(nèi)存中的存儲(chǔ)形式為: 1101100011110000在二進(jìn)制文件中的存儲(chǔ)形式為在二進(jìn)制文件中的存儲(chǔ)形式為: 1101100011110000在在ASCII文件中的存儲(chǔ)形式為文件中的存儲(chǔ)形式為00101101 00110001 00110000 00110000 00110000 00110000-10000+65536=55536的二進(jìn)制示意形式的二進(jìn)制示意形式正負(fù)號正負(fù)號和列位和列位數(shù)字的數(shù)字的ASCII碼碼本章學(xué)習(xí)的關(guān)鍵內(nèi)容本章學(xué)習(xí)的關(guān)鍵內(nèi)容:1. 編寫具有似下功能的編寫具有似下功能的C程序程序:創(chuàng)站文件(生成一個(gè)文件)創(chuàng)站文件(生成一個(gè)文件)使用文件(讀取文件中的信息
5、)使用文件(讀取文件中的信息)修改文件(寫存文件中部分信息)修改文件(寫存文件中部分信息)2.閱覽閱覽ASCII文件文件:用用TC象打開象打開C程序一樣打開、但不程序一樣打開、但不能省略能省略“.擴(kuò)展名擴(kuò)展名” (二二) 創(chuàng)站一個(gè)創(chuàng)站一個(gè)C文件文件例例1 把從鍵盤所輸入的如果干個(gè)字把從鍵盤所輸入的如果干個(gè)字符符(不包羅末了的不包羅末了的“ ”)表此刻屏表此刻屏幕上幕上 void main( ) char c ; while(c=getchar()!=n) putchar(c); 輸入輸入 book 結(jié)論結(jié)論 book程序沒有結(jié)論程序沒有結(jié)論但生成一個(gè)文件但生成一個(gè)文件文件中內(nèi)容文件中內(nèi)容: b
6、ook例例1 把從鍵盤所輸入的如果干個(gè)字符把從鍵盤所輸入的如果干個(gè)字符(不包羅不包羅末了的末了的“ ”)輸出到一個(gè)磁盤文件輸出到一個(gè)磁盤文件(文件名文件名為為file1.dat的的ASCII文件文件)中保留中保留 void main() char c ;FILE *fp ; fp=fopen(”file1.dat” , ”w” ); while(c=getchar( )!=n ) fputc(c,fp); fclose ( fp ) ;*文件封閉后文件封閉后,可用其它方式打開可用其它方式打開”w”:新創(chuàng)站一個(gè)新創(chuàng)站一個(gè)文件文件(如果已有此文如果已有此文件件, 那么先刪除舊文那么先刪除舊文件件)
7、,只能寫、不能讀只能寫、不能讀文件類型指針文件類型指針:內(nèi)存與文內(nèi)存與文件之間輸入輸出信息的件之間輸入輸出信息的橋梁橋梁例例2 在屏幕上表現(xiàn)楊輝三角形(在屏幕上表現(xiàn)楊輝三角形(10行)行)void main( )int m , n ; long a1111; for(m=1;m=10;m+) am1=1;amm=1; for (m=3;m=10;m+) for(n=2;n=m-1;n+) amn=am-1n-1+ am-1n; for ( m=1 ; m=10 ;m+) for ( n=1 ; n=m;n+) printf ( ”%7d” , amn ); printf (”n”) ; 例例2
8、 把楊輝三角形把楊輝三角形(10行行)輸出到一個(gè)磁盤輸出到一個(gè)磁盤文件中保留文件中保留(文件名為文件名為file2.dat、該文、該文件存放在件存放在E:DJKSa下下)#includevoid main( ) int m , n ; long a1111; FILE * fp ;for ( m=1 ; m=10 ;m+) am1=1; amm=1 ; for ( m=3 ; m=10 ;m+) for(n=2;n=m-1;n+) amn=am-1n-1+am-1n; fp=fopen(”E:DJKSafile2.dat” , ”w” );for(m=1;m=10;m+) f o r ( n
9、= 1 ; n = m ; n + + ) fprintf( fp,”%7d”,amn); fprintf (fp,”n”) ;fclose ( fp ) ; 例例3輸出輸出100200中全部素?cái)?shù)中全部素?cái)?shù)#includevoid main() int m,i,k; for(m=100;m=200;m+) k=sqrt(m*1.0); for(i=2;ik) printf( ”%4d”,m); 到文件名為到文件名為file3a.dat的的ASCII碼文件中碼文件中#includeFILE *p ;p=fopen(”file3a.dat”,”w”);fp,fclose(p);#include#i
10、ncludevoid main()int m,i,k; FILE *p ; p=fopen(”file3a.dat”, ”w” ); for(m=100;m=200;m+) k=sqrt(m*1.0); for(i=2;ik) fprintf(p,”%d,”,m); fclose(p); 例例3 把上一題改為二進(jìn)制文件把上一題改為二進(jìn)制文件”wb”fwrite(&m,sizeof(m),1,p);例例4、某班、某班4名學(xué)生的信息似下名學(xué)生的信息似下:struct st int no ; char name 10 ; int score 2; struct st a4= 101,Li p
11、ing,45,89, 102,Zhang pin,62,88, 103,He fang,92,100, 104,Liu ling,87,95 ; 789587Cheng ling10467.510092He fang103968862Zhang Ping102988945Li Ping101a0a1a2a3.&a0&a1&a2&a3把的信息做為一個(gè)二進(jìn)制文件存盤把的信息做為一個(gè)二進(jìn)制文件存盤,文件名文件名由鍵盤輸入由鍵盤輸入 (下面程序接到(下面程序接到void main() 前一頁的末尾)前一頁的末尾) int k ; char fname30; FILE *
12、 fp ; gets ( fname ); fp=fopen( fname , ”wb” ); for( k=0;k=3;k+) fwrite(&ak,sizeof(struct st), 1,fp); fclose ( fp ) ; 此不加雙撇號此不加雙撇號注注: 1、for( k=0;k=3;k+) fwrite(&ak,sizeof(struct st), 1,fp);可改為可改為 fwrite(a,sizeof(struct st), 4 , fp) ;注注: 2、fp=fopen( name , ”wb” );可改為可改為 if(fp=fopen(name , ”wb
13、”) =NULL) printf(”cannot open filen” ); exit(0);(三三) 使用使用C文件文件例例 5 讀 取 例 讀 取 例 3 創(chuàng) 站 的創(chuàng) 站 的 A S C I I 碼 文 件碼 文 件file3a.dat中的全部素?cái)?shù)中的全部素?cái)?shù),同時(shí)把它們表此刻同時(shí)把它們表此刻屏幕上屏幕上#include void main ( ) int k ; FILE * fp ; fp=fopen( ”file3.dat” , ”r” ); while(!feof(fp) fscanf ( fp,”%4d” , &k ); printf(”%8d”,k); fclose
14、 ( fp ) ; 文件內(nèi)部的位置指文件內(nèi)部的位置指針指向末尾時(shí)它的針指向末尾時(shí)它的值為值為1,否那么為否那么為0例例 6 讀 取 例 讀 取 例 3 創(chuàng) 站 的 二 進(jìn) 制 文 件創(chuàng) 站 的 二 進(jìn) 制 文 件file3.dat中的全部素?cái)?shù)中的全部素?cái)?shù),同時(shí)把它們表同時(shí)把它們表此刻屏幕上此刻屏幕上#includevoid main ( )int k ; FILE * fp ; fp=fopen(”file3.dat”,”rb”); while(!feof(fp) fread(&k,sizeof(k),1,fp); printf(”%8d”,k); fclose ( fp ) ; 例例
15、7.讀入例讀入例1.創(chuàng)站的文件創(chuàng)站的文件f1.dat,在屏幕上在屏幕上輸出輸出.#includevoid main()FILE *fp; char ch; fp=fopen(f1.dat,r) ; ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); fclose(fp); 如果如果fgetc(fp)讀字讀字符時(shí)遇到文件結(jié)束符時(shí)遇到文件結(jié)束符符,那么其值為那么其值為EOF(即即-1)例例8讀取例讀取例4創(chuàng)站的二進(jìn)制文件(文件創(chuàng)站的二進(jìn)制文件(文件名由鍵盤輸入)中的信息名由鍵盤輸入)中的信息#include#include void ma
16、in ( )struct st int no ;char name10 ;int score2;struct st a4;int k ;char fname30;FILE * fp ;gets ( fname );fp=fopen( fname , ”rb” );fread(a,sizeof(struct st),4,fp);fclose ( fp ) ; for( k=0;k=3;k+) fwrite(&ak,sizeof(struct st), 1,fp);可改為可改為 fwrite(a,sizeof(struct st), 4 , fp) ;fread(a,sizeof(stru
17、ct st),4,fp);可改為可改為for( k=0;k=3;k+) fread(&ak,sizeof(struct st), 1,fp);例例9.從鍵盤輸入一行字符從鍵盤輸入一行字符,寫入一個(gè)寫入一個(gè)新文件新文件(文件名為文件名為string)中中,再把該再把該文件內(nèi)容讀出表此刻屏幕上文件內(nèi)容讀出表此刻屏幕上.#includevoid main()FILE *fp; char ch;fp=fopen(string,w+);ch=getchar();while (ch!=n) fputc(ch,fp);ch=getchar();rewind(fp); ch=fgetc(fp);whi
18、le(ch!=EOF) putchar(ch);ch=fgetc(fp); printf(n);fclose(fp); 例例10.從從ASCII碼文件碼文件(例例9創(chuàng)站的創(chuàng)站的string文件文件)中讀入一個(gè)含中讀入一個(gè)含10個(gè)字符的字符串個(gè)字符的字符串.void main() FILE *fp; char str11; fp=fopen(string,r); fgets(str,11,fp); printf(n%sn,str); fclose(fp); 它會(huì)自動(dòng)在它會(huì)自動(dòng)在10個(gè)字符后加個(gè)字符后加0例例11.先在先在ASCII碼文件碼文件(例例9創(chuàng)站的創(chuàng)站的string文件文件)中追加一個(gè)字
19、符串中追加一個(gè)字符串,接著統(tǒng)計(jì)其中字符個(gè)數(shù)接著統(tǒng)計(jì)其中字符個(gè)數(shù).#includevoid main()FILE *fp; char ch,st20;int n=0; fp=fopen(string,a+);scanf(%s,st); fputs(st,fp);rewind(fp);while(!feof(fp) ch=fgetc(fp); n+;printf(”%dn”,n); fclose(fp); 上面的上面的 ch=fgetc(fp) 用用 fgetc(fp) 或或 fscanf(fp,”%c”,&ch) 或或 fseek(fp,1L,1) 代替代替13.5 文件的隨機(jī)讀寫文件的
20、隨機(jī)讀寫前面講解的對文件的讀寫方式根基上前面講解的對文件的讀寫方式根基上次序讀寫次序讀寫,即讀寫文件只能或從頭最即讀寫文件只能或從頭最先次序讀寫、或次序?qū)懺谀┪蚕却涡蜃x寫、或次序?qū)懺谀┪?但在現(xiàn)實(shí)咨詢題中常要求只讀寫文件但在現(xiàn)實(shí)咨詢題中常要求只讀寫文件中某一指定的部分中某一指定的部分.為領(lǐng)會(huì)決那個(gè)咨為領(lǐng)會(huì)決那個(gè)咨詢題只要先移動(dòng)文件內(nèi)部的位置指詢題只要先移動(dòng)文件內(nèi)部的位置指針到需要讀寫的位置針到需要讀寫的位置,再履行讀寫再履行讀寫,這種讀寫稱為隨機(jī)讀寫這種讀寫稱為隨機(jī)讀寫.實(shí)現(xiàn)隨機(jī)讀寫的關(guān)鍵是要按要求移動(dòng)實(shí)現(xiàn)隨機(jī)讀寫的關(guān)鍵是要按要求移動(dòng)位置指針位置指針,這稱為文件的定位這稱為文件的定位. 13.
21、5 文件定位文件定位移動(dòng)文件內(nèi)部位置指針的函數(shù)關(guān)鍵有兩個(gè)移動(dòng)文件內(nèi)部位置指針的函數(shù)關(guān)鍵有兩個(gè),即即rewind函數(shù)和函數(shù)和fseek函數(shù)函數(shù).1、 rewind(文件指針文件指針); 把文件內(nèi)部的位置指針移到文件首把文件內(nèi)部的位置指針移到文件首(文件內(nèi)容中第文件內(nèi)容中第一個(gè)字節(jié)或第一個(gè)字符處一個(gè)字節(jié)或第一個(gè)字符處).2、fseek(文件指針文件指針,位移量位移量,起始點(diǎn)起始點(diǎn)); 用來移動(dòng)文件內(nèi)部位置指針用來移動(dòng)文件內(nèi)部位置指針.其中其中:“文件指針文件指針”指向被移動(dòng)的文件指向被移動(dòng)的文件. “位移量位移量”示意從起始點(diǎn)最先移動(dòng)示意從起始點(diǎn)最先移動(dòng)幾字節(jié)、必須是幾字節(jié)、必須是long類型、當(dāng)
22、用整數(shù)類型、當(dāng)用整數(shù)示意時(shí)、要在其背面加示意時(shí)、要在其背面加“L”或或“l(fā)” . “起始點(diǎn)起始點(diǎn)”示意方式有三種示意方式有三種:文件首、文件首、當(dāng)前位置和文件末尾當(dāng)前位置和文件末尾.起始點(diǎn)示意方式似下起始點(diǎn)示意方式似下:起始點(diǎn)起始點(diǎn) 符號示意符號示意 數(shù)字示意數(shù)字示意文件首文件首 SEEK_SET 0當(dāng)前位置當(dāng)前位置SEEK_CUR 1文件末尾文件末尾SEEK_END 2例似例似:fseek(fp,100L,0); fseek(fp,100L,SEEK_SET);根基上把位置指針移到離文件首根基上把位置指針移到離文件首100個(gè)個(gè)字節(jié)處字節(jié)處.移到文件中第移到文件中第101個(gè)字節(jié)處個(gè)字節(jié)處.起始
23、點(diǎn)起始點(diǎn) 符號示意符號示意 數(shù)字示意數(shù)字示意文件首文件首 SEEK_SET 0當(dāng)前位置當(dāng)前位置SEEK_CUR 1文件末尾文件末尾SEEK_END 2例似例似:fseek(fp,3L,1); 和和 fseek(fp,3L,SEEK_CUT);都將位置指針移到離當(dāng)前位置都將位置指針移到離當(dāng)前位置3個(gè)字節(jié)處個(gè)字節(jié)處 fseek(fp,-10L,2); 和和 fseek(fp,-10L,SEEK_END);都將位置指針從末尾向后退都將位置指針從末尾向后退10個(gè)字節(jié)個(gè)字節(jié),倒數(shù)第倒數(shù)第10個(gè)字節(jié)處個(gè)字節(jié)處程序段程序段ch=fgetc(fp);while(ch!=EOF)putchar(ch); ch=
24、fgetc(fp);功能功能:次序、接連讀文件次序、接連讀文件中字符中字符如果在此插入如果在此插入:fseek(fp,3L,1);那么每讀一個(gè)字符、那么每讀一個(gè)字符、跳三個(gè)字符后再讀跳三個(gè)字符后再讀下一個(gè)字符下一個(gè)字符移動(dòng)位置指針之后移動(dòng)位置指針之后,可用前面講解的可用前面講解的任一種讀寫函數(shù)履行讀寫任一種讀寫函數(shù)履行讀寫.如果在此插入如果在此插入:fseek(fp,-2L,1);如何讀?如何讀?逆序逆序(四四) 修改修改C文件文件例例12.二進(jìn)制文件二進(jìn)制文件zs.dat中存放如果干個(gè)中存放如果干個(gè)整數(shù)整數(shù),要求把其中前要求把其中前10個(gè)整數(shù)都自增個(gè)整數(shù)都自增7.#includevoid main ( ) int k,j; FILE * fp ; fp=fopen( ”zs.dat” , ”rb+” ); for(j=1;j=10;j+) fseek(fp,0L,1); fread(&k,sizeof(k),1,fp); fseek(fp,-2L,1);k+=7; fwrite(&k,sizeof(k),1,f
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 零售快消品行業(yè)庫存管理優(yōu)化方案
- 電商物流配送無人機(jī)項(xiàng)目可行性報(bào)告
- 三農(nóng)村林業(yè)資源保護(hù)與管理方案
- 縣域農(nóng)村污水治理可行性研究報(bào)告
- 醫(yī)療機(jī)構(gòu)內(nèi)部溝通與協(xié)作指南
- 有機(jī)蔬菜種植可行性報(bào)告
- 車輛調(diào)度系統(tǒng)操作手冊
- 項(xiàng)目進(jìn)展匯報(bào)與未來規(guī)劃陳述
- 金融行業(yè)風(fēng)險(xiǎn)評估和管理模型構(gòu)建研究方案設(shè)計(jì)
- 無線傳感器網(wǎng)絡(luò)設(shè)備手冊
- ISO22000培訓(xùn)知識基礎(chǔ)課件
- GCP原則及相關(guān)法律法規(guī)課件
- 厚樸種苗質(zhì)量分級DB50-T 1259-2022
- 我的家鄉(xiāng)新疆-我愛你課件
- 液化天然氣(LNG)相關(guān)的知識培訓(xùn)
- 施工升降機(jī)安全管理培訓(xùn)課件
- 2017華東六省一市優(yōu)質(zhì)課課件連乘問題11月29日
- 部編版(統(tǒng)編)一年級語文下冊每課練習(xí)題(全冊全套)
- DB62∕T 4134-2020 高速公路服務(wù)區(qū)設(shè)計(jì)規(guī)范
- 《影視鑒賞(第二版)》課件2-0故事片引子
- 青島版科學(xué)一年級下冊《塑料》教學(xué)設(shè)計(jì)
評論
0/150
提交評論