版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C C語言程序設(shè)計(jì)語言程序設(shè)計(jì)第第1010章利用文件保存數(shù)據(jù)章利用文件保存數(shù)據(jù)軟件學(xué)院:劉佳軟件學(xué)院:劉佳文件的基本概念文件的基本概念文件路徑文件路徑文件名主干文件名主干文件后綴文件后綴d: cctempfile1.dat通常:文件標(biāo)識(shí)被稱為文件名。后綴用來表示文件的性質(zhì),一般不超過通常:文件標(biāo)識(shí)被稱為文件名。后綴用來表示文件的性質(zhì),一般不超過3個(gè)字母;個(gè)字母;Doc,txt,dat,c,exe,ppt,bmp等等。等等。文件的類別文件的類別 按文件的邏輯結(jié)構(gòu):按文件的邏輯結(jié)構(gòu):l 記錄文件:由具有一定結(jié)構(gòu)的記錄組成(定長(zhǎng)和記錄文件:由具有一定結(jié)構(gòu)的記錄組成(定長(zhǎng)和不定不定 長(zhǎng)),幫助記憶的都
2、可以成為記錄文件。長(zhǎng)),幫助記憶的都可以成為記錄文件。 流流式文件式文件:構(gòu)成文件的基本單位為:構(gòu)成文件的基本單位為字符字符,長(zhǎng)度為所包含字,長(zhǎng)度為所包含字 符的個(gè)數(shù),又稱字符流文件。符的個(gè)數(shù),又稱字符流文件。按按存儲(chǔ)介質(zhì):存儲(chǔ)介質(zhì):l 普通文件:存儲(chǔ)介質(zhì)文件(磁盤、磁帶等)普通文件:存儲(chǔ)介質(zhì)文件(磁盤、磁帶等)l 設(shè)備文件:非存儲(chǔ)介質(zhì)(鍵盤、顯示器、打印機(jī)等)設(shè)備文件:非存儲(chǔ)介質(zhì)(鍵盤、顯示器、打印機(jī)等) 按文件的內(nèi)容按文件的內(nèi)容l 程序文件。程序文件又可分為源文件、目標(biāo)文件和可執(zhí)行程序文件。程序文件又可分為源文件、目標(biāo)文件和可執(zhí)行文件。文件。l 數(shù)據(jù)文件。如各種圖像文件、聲音文件等。數(shù)據(jù)文
3、件。如各種圖像文件、聲音文件等。文件的類別文件的類別 根根據(jù)文件的組織形式據(jù)文件的組織形式l 順序存取文件;順序存取文件;l 隨機(jī)存取文件。隨機(jī)存取文件。 按數(shù)據(jù)的組織形式:按數(shù)據(jù)的組織形式:l 文本文件:文本文件: ASCIIASCII文件文件,每個(gè)字節(jié)存放一個(gè)字符的,每個(gè)字節(jié)存放一個(gè)字符的ASCIIASCII碼碼l 二進(jìn)制文件:數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣存放二進(jìn)制文件:數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣存放按數(shù)據(jù)分類的文件,是我按數(shù)據(jù)分類的文件,是我們今天學(xué)習(xí)的內(nèi)容們今天學(xué)習(xí)的內(nèi)容0011000100110000001100000011000000110000(1)(0)(0)(0)ASC
4、II形式:一個(gè)字節(jié)代表一個(gè)字符,便于輸出字符形式:一個(gè)字節(jié)代表一個(gè)字符,便于輸出字符0010011100010000二進(jìn)制形式:一個(gè)字節(jié)不對(duì)應(yīng)一個(gè)字符,不能直接輸出字符形式二進(jìn)制形式:一個(gè)字節(jié)不對(duì)應(yīng)一個(gè)字符,不能直接輸出字符形式(10000)ASCII文件:每一個(gè)字節(jié)放一個(gè)字符的ASCII碼 。二進(jìn)制文件:數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存儲(chǔ)的, 不加轉(zhuǎn)換地輸出到外存。(0)整數(shù)整數(shù)10000:分別占:分別占5字節(jié)和字節(jié)和2字節(jié)字節(jié)文件處理方法文件處理方法l緩沖文件系統(tǒng)緩沖文件系統(tǒng):系統(tǒng)自動(dòng)為正在使用的文件開辟內(nèi)存緩:系統(tǒng)自動(dòng)為正在使用的文件開辟內(nèi)存緩沖區(qū)沖區(qū)a文件指針文件指針 文件類型指針文件類型
5、指針直接用直接用FILE類型名定義變量,每一個(gè)類型名定義變量,每一個(gè)FILE類型變量對(duì)類型變量對(duì)應(yīng)一個(gè)文件的信息區(qū),包含該文件的有關(guān)信息。應(yīng)一個(gè)文件的信息區(qū),包含該文件的有關(guān)信息。FILEf; 定義了一個(gè)結(jié)構(gòu)體變量定義了一個(gè)結(jié)構(gòu)體變量f,可以用它來存放一個(gè)文件的有可以用它來存放一個(gè)文件的有關(guān)信息,這些信息是建立文件時(shí)根據(jù)文件的性質(zhì)由編譯關(guān)信息,這些信息是建立文件時(shí)根據(jù)文件的性質(zhì)由編譯系統(tǒng)自動(dòng)放入的。系統(tǒng)自動(dòng)放入的。一般不對(duì)一般不對(duì)FILE類型變量命名,而是設(shè)置一個(gè)指向類型變量命名,而是設(shè)置一個(gè)指向FILE類型變類型變量的指針變量,用指針變量來引用量的指針變量,用指針變量來引用FILE類型變量。
6、類型變量。 文件類型指針文件類型指針定義定義指向文件型數(shù)據(jù)的指針變量: FILE *fp;文件文件f1的的文件信息區(qū)文件信息區(qū)fp1文件文件f2的的文件信息區(qū)文件信息區(qū)fp2文件文件f3的的文件信息區(qū)文件信息區(qū)fp3FILE*fp1,*fp2,*fp3; /n個(gè)文件設(shè)置個(gè)文件設(shè)置n個(gè)指針變量個(gè)指針變量文件的打開、讀寫和關(guān)閉文件的打開、讀寫和關(guān)閉 用法:用法:文件打開文件打開時(shí),系統(tǒng)時(shí),系統(tǒng)自動(dòng)自動(dòng)建立文件信息區(qū)和緩沖區(qū),文件指針變量指向文件,建立文件信息區(qū)和緩沖區(qū),文件指針變量指向文件,文件關(guān)閉文件關(guān)閉后,它的文件信息區(qū)和緩存區(qū)被釋放,指針變量不指向文件。后,它的文件信息區(qū)和緩存區(qū)被釋放,指針
7、變量不指向文件。打開文件的打開文件的方式字符方式字符含 義r打開一個(gè)已存在的文件,準(zhǔn)備從文件中打開一個(gè)已存在的文件,準(zhǔn)備從文件中讀取數(shù)據(jù)讀取數(shù)據(jù)。不能向。不能向文件寫數(shù)據(jù)文件寫數(shù)據(jù)w創(chuàng)建一個(gè)新文件,準(zhǔn)備向文件創(chuàng)建一個(gè)新文件,準(zhǔn)備向文件寫入數(shù)據(jù)寫入數(shù)據(jù)。不能從文件中讀。不能從文件中讀取數(shù)據(jù)。如果文件已經(jīng)存在,這個(gè)文件將被覆蓋取數(shù)據(jù)。如果文件已經(jīng)存在,這個(gè)文件將被覆蓋a打開一個(gè)已存在的文件,準(zhǔn)備在文件尾部打開一個(gè)已存在的文件,準(zhǔn)備在文件尾部添添加數(shù)據(jù)加數(shù)據(jù)。不能。不能從文件中讀取數(shù)據(jù)。如果文件不存在,則創(chuàng)建這個(gè)文件準(zhǔn)從文件中讀取數(shù)據(jù)。如果文件不存在,則創(chuàng)建這個(gè)文件準(zhǔn)備寫入數(shù)據(jù)備寫入數(shù)據(jù)r+打開一個(gè)
8、已存在的文件,準(zhǔn)備打開一個(gè)已存在的文件,準(zhǔn)備讀寫讀寫。既可以讀取數(shù)據(jù),也。既可以讀取數(shù)據(jù),也可以寫入數(shù)據(jù)可以寫入數(shù)據(jù)w+創(chuàng)建一個(gè)新文件,準(zhǔn)備創(chuàng)建一個(gè)新文件,準(zhǔn)備讀寫讀寫。如果文件已經(jīng)存在,則覆蓋。如果文件已經(jīng)存在,則覆蓋原文件原文件a+等價(jià)于等價(jià)于a,但可從文件中,但可從文件中讀取數(shù)據(jù)讀取數(shù)據(jù)t打開一個(gè)打開一個(gè)文本文件文本文件b打開一個(gè)打開一個(gè)二進(jìn)制文件二進(jìn)制文件a在在順序?qū)戫樞驅(qū)憰r(shí),先寫入的數(shù)據(jù)存放在文件中前面,時(shí),先寫入的數(shù)據(jù)存放在文件中前面,后寫入的數(shù)據(jù)存放在文件中后面后寫入的數(shù)據(jù)存放在文件中后面在在順序讀順序讀時(shí),先讀文件中前面的數(shù)據(jù),后讀文時(shí),先讀文件中前面的數(shù)據(jù),后讀文件中后面的數(shù)
9、據(jù)件中后面的數(shù)據(jù)對(duì)對(duì)順序讀寫順序讀寫來說,對(duì)文件讀寫數(shù)據(jù)的順序和數(shù)來說,對(duì)文件讀寫數(shù)據(jù)的順序和數(shù)據(jù)在文件中的物理順序是一致的據(jù)在文件中的物理順序是一致的 文件的順序讀寫文件的順序讀寫 知識(shí)點(diǎn)回顧知識(shí)點(diǎn)回顧 字符數(shù)據(jù)的輸入輸出字符數(shù)據(jù)的輸入輸出 getchar()() putchar()()字符輸入函數(shù):從終端輸入字符輸入函數(shù):從終端輸入一個(gè)字符一個(gè)字符字符輸出函數(shù):向終端輸出字符輸出函數(shù):向終端輸出一個(gè)字符一個(gè)字符注意:輸入輸出的是一個(gè)字符,調(diào)用注意:輸入輸出的是一個(gè)字符,調(diào)用getchargetchar()()函數(shù),必須加上函數(shù),必須加上#include#include【例例10.110.1
10、】從鍵盤輸入一些字符,逐個(gè)把它們送到磁盤上從鍵盤輸入一些字符,逐個(gè)把它們送到磁盤上去,直到輸入一個(gè)去,直到輸入一個(gè)“#”#”為止為止 解題思路:解題思路:1、用、用getchar函數(shù)從鍵盤逐個(gè)輸入字符。函數(shù)從鍵盤逐個(gè)輸入字符。2、然后用、然后用fputc函數(shù)寫到磁盤函數(shù)寫到磁盤file1.dat文件。文件。3、輸入一個(gè)字符寫一個(gè)字符,反復(fù)循環(huán),直到滿足條件。、輸入一個(gè)字符寫一個(gè)字符,反復(fù)循環(huán),直到滿足條件。while()的條件為字符?。ǎ┑臈l件為字符!=#include #include int main() FILE *fp; char ch,filename10; printf(請(qǐng)輸入所用
11、的文件名:請(qǐng)輸入所用的文件名:); scanf(%s,filename); if(fp=fopen(filename,w)=NULL) / 打開輸出文件使打開輸出文件使fp指向此文件指向此文件 printf(無法打開此文件無法打開此文件n); / 如果打開時(shí)出錯(cuò),就輸出如果打開時(shí)出錯(cuò),就輸出打不開打不開的信息的信息 exit(0); / 終止程序終止程序*/ ch=getchar( ); / 接收在執(zhí)行接收在執(zhí)行scanf語句時(shí)最后輸入的回車符語句時(shí)最后輸入的回車符 printf(請(qǐng)輸入一個(gè)字符串請(qǐng)輸入一個(gè)字符串(以以#結(jié)束結(jié)束):); ch=getchar( ); / 接收從鍵盤輸入的第一個(gè)
12、字符接收從鍵盤輸入的第一個(gè)字符 while(ch!=#) / 當(dāng)輸入當(dāng)輸入#時(shí)結(jié)束循環(huán)時(shí)結(jié)束循環(huán) fputc(ch,fp); / 向磁盤文件輸出一個(gè)字符向磁盤文件輸出一個(gè)字符 putchar(ch); / 將輸出的字符顯示在屏幕上將輸出的字符顯示在屏幕上 ch=getchar(); / 再接收從鍵盤輸入的一個(gè)字符再接收從鍵盤輸入的一個(gè)字符 fclose(fp); / 關(guān)閉文件關(guān)閉文件 putchar(10); / 輸出換行,輸出換行,ascii為為10 例例10.2 10.2 將一個(gè)磁盤文件中的信息復(fù)制到另一個(gè)磁盤將一個(gè)磁盤文件中的信息復(fù)制到另一個(gè)磁盤文件中。文件中。 今要求將上例建立的今要求
13、將上例建立的file1.datfile1.dat文件中的內(nèi)文件中的內(nèi)容復(fù)制到另一個(gè)磁盤文件容復(fù)制到另一個(gè)磁盤文件file2.datfile2.dat中。中。解題思路:解題思路:處理此問題的算法是:從處理此問題的算法是:從file1.datfile1.dat文件中逐個(gè)讀入文件中逐個(gè)讀入字符,然后逐個(gè)輸出到字符,然后逐個(gè)輸出到file2.datfile2.dat中。中。fgetc()fgetc()讀取讀取,fputc(),fputc()輸出輸出#include #include void main( ) FILE *in,*out; char ch,infile10,outfile10; prin
14、tf(輸入讀入文件的名字:); scanf(%s,infile); file1.datfile1.dat printf(輸入輸出文件的名字:); scanf(“%s”,outfile); filefile2 2.dat.dat if(in=fopen(infile,“r”)=NULL) printf(無法打開此文件n); exit(0); if(out=fopen(outfile,w)=NULL) / 打開輸出文件 printf(無法打開此文件n); exit(0); while(!feof(in) / 如果未遇到輸入文件的結(jié)束標(biāo)志 ch=fgetc(in); / 從輸入文件讀入一個(gè)字符,暫放
15、在變量ch中 fputc(ch,out); / 將ch寫到輸出文件中 putchar(ch); / 將ch顯示在屏幕上 putchar(10); / 顯示完全部字符后換行 fclose(in); / 關(guān)閉輸入文件 fclose(out); / 關(guān)閉輸出文件 按文本文件方式處理,按文本文件方式處理,改為改為rb和和wb,則復(fù)制,則復(fù)制一個(gè)二進(jìn)制文件一個(gè)二進(jìn)制文件程序說明:程序說明: 用來指向文件的當(dāng)前讀寫用來指向文件的當(dāng)前讀寫字節(jié)字節(jié) 文件讀寫位置指針與文件指針的區(qū)別文件讀寫位置指針與文件指針的區(qū)別: 若讀入若讀入n-1個(gè)字符前遇換行符或文件尾(個(gè)字符前遇換行符或文件尾(EOF)即結(jié)束)即結(jié)束)
16、 例例10.3 從鍵盤讀入若干個(gè)字符串,對(duì)它們按字母大從鍵盤讀入若干個(gè)字符串,對(duì)它們按字母大小的順序排序,然后把排好序的字符串送到磁盤文小的順序排序,然后把排好序的字符串送到磁盤文件中保存。件中保存。 解題思路:為解決問題,可分為三個(gè)步驟:解題思路:為解決問題,可分為三個(gè)步驟:u從從鍵盤讀入鍵盤讀入n個(gè)字符串個(gè)字符串,存放在一個(gè)二維字符數(shù)組中,存放在一個(gè)二維字符數(shù)組中,每一個(gè)一維數(shù)組存放一個(gè)字符串;每一個(gè)一維數(shù)組存放一個(gè)字符串;u對(duì)字符數(shù)組中的對(duì)字符數(shù)組中的n個(gè)字符串按字母順序排序,排好序的個(gè)字符串按字母順序排序,排好序的字符串仍存放在字符數(shù)組中;字符串仍存放在字符數(shù)組中;u將字符數(shù)組中的字符
17、串順序輸出。將字符數(shù)組中的字符串順序輸出。知識(shí)點(diǎn)回顧知識(shí)點(diǎn)回顧 字符串處理函數(shù)字符串處理函數(shù)1、puts(字符數(shù)組):將一個(gè)字符串輸出到終端。(字符數(shù)組):將一個(gè)字符串輸出到終端。2、gets(字符數(shù)組):從終端輸入一個(gè)字符串到字符數(shù)。(字符數(shù)組):從終端輸入一個(gè)字符串到字符數(shù)。3、strcmp(字符串(字符串1,字符串,字符串2):字符串比較):字符串比較 字符串字符串1=字符串字符串2 函數(shù)值為函數(shù)值為0 字符串字符串1字符串字符串2 函數(shù)值為一正整數(shù)函數(shù)值為一正整數(shù) 字符串字符串1字符串字符串2 函數(shù)值為一負(fù)整數(shù)函數(shù)值為一負(fù)整數(shù)4、strcpy(字符數(shù)組字符數(shù)組1,字符串,字符串2):將
18、字符串:將字符串2復(fù)制到字符數(shù)復(fù)制到字符數(shù)組組1中。中。#include #include #include int main() FILE *fp; char str310,temp10; / str存放字符串二維數(shù)組,存放字符串二維數(shù)組,temp臨時(shí)臨時(shí)數(shù)組數(shù)組 int i,j,k,n=3; printf(Enter strings:n); / 提示輸入字符串提示輸入字符串 */ for(i=0;in;i+) gets(stri); / 輸入字符串輸入字符串 for(i=0;in-1;i+) / 用選擇法(小到大)對(duì)字符串排序用選擇法(小到大)對(duì)字符串排序 k=i; for(j=i+1;j
19、0) k=j; If(k!=i) strcpy(temp,stri); strcpy(stri,strk); strcpy(strk,temp); if(fp=fopen(D:CCstring.dat,w)=NULL) / 打開磁盤文件打開磁盤文件 printf(cant open file!n); exit(0); printf(nThe new sequence:n); for(i=0;in;i+) fputs(stri,fp); fputs(n,fp); printf(%sn,stri) / 在屏幕上顯示字符串在屏幕上顯示字符串 #include #include void main()
20、 FILE *fp; char str310; int i=0; if(fp=fopen(“D:CCstring.dat”,“r”)=NULL) printf(cant open file!n); exit(0); while(fgets(stri,10,fp)!=NULL) /若執(zhí)行函數(shù)成功若執(zhí)行函數(shù)成功 printf(%s,stri); i+; fclose (fp);不用人為地輸出不用人為地輸出n為了驗(yàn)證輸出到磁盤文件中的內(nèi)容,可以編寫出以下的為了驗(yàn)證輸出到磁盤文件中的內(nèi)容,可以編寫出以下的程序,從該文件中讀回字符串,并在屏幕上顯示。程序,從該文件中讀回字符串,并在屏幕上顯示。10.3.
21、3 文件的格式化讀寫文件的格式化讀寫一般調(diào)用方式為:一般調(diào)用方式為:fprintf(文件指針文件指針,格式字符串格式字符串,輸出表列輸出表列);fscanf (文件指針文件指針,格式字符串格式字符串,輸入表列輸入表列);pirntf、scanf數(shù)據(jù)格式化讀寫,數(shù)據(jù)格式化讀寫,fprintf、fscanf文件格式化讀寫文件格式化讀寫10.3.4 用二進(jìn)制方式讀寫文件用二進(jìn)制方式讀寫文件 一般調(diào)用形式為一般調(diào)用形式為:fread(buffer,size,count,fp);fwrite(buffer,size,count,fp); buffer:是一個(gè)地址:是一個(gè)地址u對(duì)對(duì)fread來說,它是讀入
22、數(shù)據(jù)的存放地址來說,它是讀入數(shù)據(jù)的存放地址u對(duì)對(duì)fwrite來說,是要輸出數(shù)據(jù)的地址來說,是要輸出數(shù)據(jù)的地址 size:要讀寫的字節(jié)數(shù):要讀寫的字節(jié)數(shù) count:要讀寫多少個(gè)數(shù)據(jù)項(xiàng):要讀寫多少個(gè)數(shù)據(jù)項(xiàng) fp:FILE類型指針類型指針例:例:fread(f,4,10,fp)讀寫數(shù)據(jù)塊讀寫數(shù)據(jù)塊從從fp指向的文件讀入指向的文件讀入10個(gè)個(gè)4字節(jié)的數(shù)據(jù)放入字節(jié)的數(shù)據(jù)放入f數(shù)組數(shù)組如果有一個(gè)如果有一個(gè)struct student 結(jié)構(gòu)體類型結(jié)構(gòu)體類型struct student char name【10】; int num; int age; char addr【30】; stud【40】; for
23、(i=0;i40;i+) fread(&studi, sizeof(struct student_type),1,fp); for(i=0;i40;i+) fwrite(&studi, sizeof(struct student_type),1,fp);假設(shè)學(xué)生的數(shù)據(jù)存放在磁盤文件中,可以用假設(shè)學(xué)生的數(shù)據(jù)存放在磁盤文件中,可以用for語句讀入語句讀入40個(gè)學(xué)生數(shù)據(jù)個(gè)學(xué)生數(shù)據(jù)用用for語句將內(nèi)存中的學(xué)生數(shù)據(jù)輸出到磁盤文件中語句將內(nèi)存中的學(xué)生數(shù)據(jù)輸出到磁盤文件中 例10.4 從鍵盤輸入10個(gè)學(xué)生的有關(guān)數(shù)據(jù),然后把它們轉(zhuǎn)存到磁盤文件中。 #include #define SIZE 1
24、0struct student_type char name10; int num; int age; char addr15; studSIZE; void main() int i; printf(“enter data of students:n); for(i=0;iSIZE;i+) scanf(%s%d%d%s, ,&studi.num, &studi.age,studi.addr); save( );void save( ) FILE *fp; int i; if(fp=fopen(stu_dat,wb)=NULL) printf(cannot
25、open filen); exit(0); for(i=0;iSIZE;i+) if(fwrite(&studi, sizeof(struct student_type),1,fp)!=1) printf(file write errorn); fclose(fp);當(dāng)前路徑下的文件當(dāng)前路徑下的文件函數(shù)調(diào)用成功,返回函數(shù)調(diào)用成功,返回count的值的值#include #define SIZE 10struct student_type char name10; int num; int age; char addr15;studSIZE; void main( )int i; FIL
26、E *fp; if(fp=fopen(stu_dat,rb)=NULL) printf(cannot open filen); return; 為了驗(yàn)證為了驗(yàn)證在磁盤文在磁盤文件中是否件中是否已存在此已存在此數(shù)據(jù),可數(shù)據(jù),可以用以下以用以下程序從文程序從文件中讀入件中讀入數(shù)據(jù),然數(shù)據(jù),然后在屏幕后在屏幕上輸出上輸出 for(i=0;iSIZE;i+) fread (&studi,sizeof(struct student_type),1,fp); printf (“%-10s %4d %4d %-15sn”, ,studi.num, studi. age,studi
27、.addr); fclose (fp); 對(duì)使用文件類型的要求:對(duì)使用文件類型的要求: fgetc( )和和fputc( )函數(shù)主要對(duì)文本文件進(jìn)行讀寫,但也可對(duì)二進(jìn)制文函數(shù)主要對(duì)文本文件進(jìn)行讀寫,但也可對(duì)二進(jìn)制文件進(jìn)行讀寫;件進(jìn)行讀寫; fgets( )和和fputs( )函數(shù)主要對(duì)文本文件進(jìn)行讀寫,對(duì)二進(jìn)制文件操作函數(shù)主要對(duì)文本文件進(jìn)行讀寫,對(duì)二進(jìn)制文件操作無意義;無意義; fread( )和和fwrite( )函數(shù)主要對(duì)二進(jìn)制文件進(jìn)行讀寫,但也可對(duì)文本文函數(shù)主要對(duì)二進(jìn)制文件進(jìn)行讀寫,但也可對(duì)文本文件進(jìn)行讀寫;件進(jìn)行讀寫; fscanf( )和和fprintf( )函數(shù)主要對(duì)文本文件進(jìn)行讀寫
28、,對(duì)二進(jìn)制文件操函數(shù)主要對(duì)文本文件進(jìn)行讀寫,對(duì)二進(jìn)制文件操作無意義。作無意義。文件的隨機(jī)讀寫文件的隨機(jī)讀寫隨機(jī)訪問不是按數(shù)據(jù)在文件中的物理位置次序進(jìn)行讀寫,隨機(jī)訪問不是按數(shù)據(jù)在文件中的物理位置次序進(jìn)行讀寫,而是可以對(duì)任何位置上的數(shù)據(jù)進(jìn)行訪問,顯然這種方法而是可以對(duì)任何位置上的數(shù)據(jù)進(jìn)行訪問,顯然這種方法比順序訪問效率高得多。比順序訪問效率高得多。順序訪問容易理解,但效率不高。是按數(shù)據(jù)在文件中的順序訪問容易理解,但效率不高。是按數(shù)據(jù)在文件中的物理位置次序進(jìn)行讀寫物理位置次序進(jìn)行讀寫例如:要查詢?cè)诠枮I學(xué)院居住的一個(gè)女同學(xué),按順序訪問的話例如:要查詢?cè)诠枮I學(xué)院居住的一個(gè)女同學(xué),按順序訪問的話從一號(hào)
29、寢室從一號(hào)寢室101寢室的第寢室的第1個(gè)床進(jìn)行訪問,操作容易,效率不高!個(gè)床進(jìn)行訪問,操作容易,效率不高!文件的隨機(jī)讀寫文件的隨機(jī)讀寫l 文件位置指針文件位置指針-指向當(dāng)前讀寫位置的指針指向當(dāng)前讀寫位置的指針l 讀寫方式讀寫方式 如何強(qiáng)制使位置指針指向指定的位置?如何強(qiáng)制使位置指針指向指定的位置? 解題思路:解題思路:1 1、有、有2 2個(gè)文件,需定義個(gè)文件,需定義2 2個(gè)文件指針變量,分別指向文件。個(gè)文件指針變量,分別指向文件。2 2、將內(nèi)容顯示在屏幕上,需要調(diào)用、將內(nèi)容顯示在屏幕上,需要調(diào)用putcharputchar函數(shù)。函數(shù)。注意注意:1 1、在第一次讀入完文件內(nèi)容后,位置指針指到文件
30、的末尾,、在第一次讀入完文件內(nèi)容后,位置指針指到文件的末尾,如果再接著讀數(shù)據(jù),就遇到文件結(jié)束標(biāo)志,如果再接著讀數(shù)據(jù),就遇到文件結(jié)束標(biāo)志,feoffeof函數(shù)的函數(shù)的值等于值等于1(1(真真) ),無法再讀數(shù)據(jù)。,無法再讀數(shù)據(jù)。2 2、必須在程序中用必須在程序中用rewindrewind函數(shù)使位置指針返回文件開頭函數(shù)使位置指針返回文件開頭 例例10.5 10.5 有一個(gè)磁盤文件,第一次將它的內(nèi)容顯示在有一個(gè)磁盤文件,第一次將它的內(nèi)容顯示在屏幕上,第二次把它復(fù)制到另一文件上。屏幕上,第二次把它復(fù)制到另一文件上。#includeint main() FILE *fp1,*fp2; fp1=fopen
31、(file1.dat,r); / 打開輸入文件打開輸入文件 fp2=fopen(file2.dat,w); / 打開輸出文件打開輸出文件 while(!feof(fp1) putchar(getc(fp1); / 逐個(gè)讀入字符并輸出到屏幕逐個(gè)讀入字符并輸出到屏幕 putchar(10); / 輸出一個(gè)換行輸出一個(gè)換行 rewind(fp1); / 使文件位置指示器返回文件頭使文件位置指示器返回文件頭 while(!feof(fp1) putc(getc(fp1),fp2); / 從文件頭重新逐個(gè)讀字符,從文件頭重新逐個(gè)讀字符, 輸出到輸出到file2文件文件 fclose(fp1);fclose(fp2); 例例10.5 10.5 有一個(gè)磁盤文件,第一次將它的內(nèi)容顯示在屏幕上,第有一個(gè)磁盤文件,第一次將它的內(nèi)容顯示在屏幕上,第二次把它復(fù)制到另外一個(gè)文件上二次把它復(fù)制到另外一個(gè)文件上 fseek:用:用fseek函數(shù)移動(dòng)位置指針函數(shù)移動(dòng)位置指針fseek函數(shù)一般用于二進(jìn)制文件。位移量應(yīng)是函數(shù)一般用于二進(jìn)制文件。位移量應(yīng)是long型數(shù)據(jù)型數(shù)據(jù)(在數(shù)字的末尾加一個(gè)字母在數(shù)字的末尾加一個(gè)字母L)下面是下面是fseek函數(shù)調(diào)用的幾個(gè)例子:函數(shù)調(diào)用的幾個(gè)例子: ufsee
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 洗手護(hù)士保持手部清潔
- 2025-2030全球游戲QA和測(cè)試服務(wù)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)三維木質(zhì)墻板行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)電儲(chǔ)水熱水器行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球加厚防爆高壓鍋行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)鋁箔膠囊行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)工作站用橋式起重機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球法務(wù)技術(shù)服務(wù)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025合同模板房地產(chǎn)收購(gòu)合同昆山某國(guó)際廣場(chǎng)整體購(gòu)買協(xié)議
- 借款合同擔(dān)保書范本
- 青海省海北藏族自治州(2024年-2025年小學(xué)六年級(jí)語文)統(tǒng)編版隨堂測(cè)試(上學(xué)期)試卷及答案
- 外研版(三起)小學(xué)英語三年級(jí)下冊(cè)Unit 1 Animal friends Get ready start up 課件
- 江蘇省無錫市2023-2024學(xué)年高三上學(xué)期期終教學(xué)質(zhì)量調(diào)研測(cè)試語文試題(解析版)
- 銅礦隱蔽致災(zāi)普查治理工作計(jì)劃
- 《民航安全檢查(安檢技能實(shí)操)》課件-第一章 民航安全檢查員職業(yè)道德
- 學(xué)校食品安全教育學(xué)習(xí)活動(dòng)食品安全講座課件
- DB34T4826-2024畜禽養(yǎng)殖業(yè)污染防治技術(shù)規(guī)范
- 腰麻課件教學(xué)課件
- 石油化工企業(yè)環(huán)境保護(hù)管理制度預(yù)案
- 2024年甘肅省高考?xì)v史試卷(含答案解析)
- 2024年山東省煙臺(tái)市初中學(xué)業(yè)水平考試地理試卷含答案
評(píng)論
0/150
提交評(píng)論