譚浩強(qiáng)C程序設(shè)計(jì)(第三版)課件_第13章_文件_第1頁(yè)
譚浩強(qiáng)C程序設(shè)計(jì)(第三版)課件_第13章_文件_第2頁(yè)
譚浩強(qiáng)C程序設(shè)計(jì)(第三版)課件_第13章_文件_第3頁(yè)
譚浩強(qiáng)C程序設(shè)計(jì)(第三版)課件_第13章_文件_第4頁(yè)
譚浩強(qiáng)C程序設(shè)計(jì)(第三版)課件_第13章_文件_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、n 文件簡(jiǎn)單應(yīng)用文件簡(jiǎn)單應(yīng)用13.1 13.1 文件概述文件概述13.2 13.2 文件類型指針文件類型指針13.3 13.3 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉13.4 13.4 文件的讀寫文件的讀寫13.5 13.5 文件的定位文件的定位13.6 13.6 出錯(cuò)的檢測(cè)出錯(cuò)的檢測(cè)13.7 13.7 文件輸入輸出小結(jié)文件輸入輸出小結(jié) 文件:文件指存儲(chǔ)在外部介質(zhì)(如磁盤磁帶)上數(shù)據(jù)的集合。 操作系統(tǒng)是以文件為單位對(duì)數(shù)據(jù)進(jìn)行管理的。文件文件程序程序數(shù)據(jù)區(qū)數(shù)據(jù)區(qū)輸輸出出文件緩沖區(qū)文件緩沖區(qū)輸輸入入文件緩沖區(qū)文件緩沖區(qū)13.1 C13.1 C文件概述文件概述( (續(xù)續(xù)) )文件的分類從用戶觀點(diǎn):特殊文件

2、(標(biāo)準(zhǔn)輸入輸出文件或標(biāo)準(zhǔn)設(shè)備文件)。普通文件(磁盤文件)。從操作系統(tǒng)的角度看,每一個(gè)與主機(jī)相連的輸入輸出設(shè)備看作是一個(gè)文件。例:輸入文件:終端鍵盤 輸出文件:顯示屏和打印機(jī)文件的分類按數(shù)據(jù)的組織形式:ASCII文件(文本文件):每一個(gè)字節(jié)放一個(gè)ASCII代碼二進(jìn)制文件:把內(nèi)存中的數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣輸出到磁盤上存放。例:整數(shù)10000在內(nèi)存中的存儲(chǔ)形式以及分別按ASCII碼形式和二進(jìn)制形式輸出如下圖所示:13.1 C13.1 C文件概述文件概述( (續(xù)續(xù)) )13.1 C13.1 C文件概述文件概述( (續(xù)續(xù)) )文件的分類ASCII文件和二進(jìn)制文件的比較:ASCII文件便于對(duì)字符進(jìn)

3、行逐個(gè)處理,也便于輸出字符。但一般占存儲(chǔ)空間較多,而且要花費(fèi)轉(zhuǎn)換時(shí)間。二進(jìn)制文件可以節(jié)省外存空間和轉(zhuǎn)換時(shí)間,但一個(gè)字節(jié)并不對(duì)應(yīng)一個(gè)字符,不能直接輸出字符形式。一般中間結(jié)果數(shù)據(jù)需要暫時(shí)保存在外存上,以后又需要輸入內(nèi)存的,常用二進(jìn)制文件保存。13.1 C13.1 C文件概述文件概述( (續(xù)續(xù)) )文件的分類C語(yǔ)言對(duì)文件的處理方法:緩沖文件系統(tǒng):系統(tǒng)自動(dòng)地在內(nèi)存區(qū)為每一個(gè)正在使用的文件開(kāi)辟一個(gè)緩沖區(qū)。用緩沖文件系統(tǒng)進(jìn)行的輸入輸出又稱為高級(jí)磁盤輸入輸出。非緩沖文件系統(tǒng):系統(tǒng)不自動(dòng)開(kāi)辟確定大小的緩沖區(qū),而由程序?yàn)槊總€(gè)文件設(shè)定緩沖區(qū)。用非緩沖文件系統(tǒng)進(jìn)行的輸入輸出又稱為低級(jí)輸入輸出系統(tǒng)。13.1 C13.

4、1 C文件概述文件概述( (續(xù)續(xù)) )說(shuō)明:在UNIX系統(tǒng)下,用緩沖文件系統(tǒng)來(lái)處理文本文件,用非緩沖文件系統(tǒng)來(lái)處理二進(jìn)制文件。ANSI C 標(biāo)準(zhǔn)只采用緩沖文件系統(tǒng)來(lái)處理文本文件和二進(jìn)制文件。C語(yǔ)言中對(duì)文件的讀寫都是用庫(kù)函數(shù)來(lái)實(shí)現(xiàn)。13.2 13.2 文件類型指針文件類型指針Turbo 在stdio.h文件中有以下的文件類型聲明:typedef struct shortlevel; * *緩沖區(qū)緩沖區(qū)“滿滿”或或“空空”的程度的程度* * unsignedflags; * *文件狀態(tài)標(biāo)志文件狀態(tài)標(biāo)志* * charfd; * *文件描述符文件描述符* * unsignedcharhold; *

5、*如無(wú)緩沖區(qū)不讀取字符如無(wú)緩沖區(qū)不讀取字符* * shortbsize; * *緩沖區(qū)的大小緩沖區(qū)的大小* * unsignedchar*buffer;/;/* *數(shù)據(jù)緩沖區(qū)的位置數(shù)據(jù)緩沖區(qū)的位置* */ / unsignedar*curp;/ /* *指針,當(dāng)前的指向指針,當(dāng)前的指向* */ / unsignedistemp;/ /* *臨時(shí)文件,指示器臨時(shí)文件,指示器* */ / shorttoken;/ /* *用于有效性檢查用于有效性檢查* */ /FILE; 在緩沖文件系統(tǒng)中,每個(gè)被使用的文件都要在內(nèi)存中開(kāi)辟一FILE類型的區(qū),存放文件的有關(guān)信息。13.2 13.2 文件類型指針文件

6、類型指針( (續(xù)續(xù)) )FILE類型的數(shù)組:FILEFILEf f5 5; ;定義了一個(gè)結(jié)構(gòu)體數(shù)組f,它有5個(gè)元素,可以用來(lái)存放5個(gè)文件的信息。文件型指針變量:FILE FILE * *fpfp;fp是一個(gè)指向FILE類型結(jié)構(gòu)體的指針變量??梢允筬p指向某一個(gè)文件的結(jié)構(gòu)體變量,從而通過(guò)該結(jié)構(gòu)體變量中的文件信息能夠訪問(wèn)該文件。如果有個(gè)文件,一般應(yīng)設(shè)個(gè)指針變量,使它們分別指向個(gè)文件,以實(shí)現(xiàn)對(duì)文件的訪問(wèn)。13.3 13.3 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉一.文件的打開(kāi)(fopen函數(shù))函數(shù)調(diào)用:FILE *fp;fpfopen(文件名,使用文件方式);需要打開(kāi)的文件名,也就是準(zhǔn)備訪問(wèn)的文件的名字;

7、使用文件的方式(“讀”還是“寫”等);讓哪一個(gè)指針變量指向被打開(kāi)的文件。 13.3 13.3 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉( (續(xù)續(xù)) )文件使用方式含文件使用方式含 義義 “r r” ( (只讀只讀) )為為輸入輸入打開(kāi)一個(gè)打開(kāi)一個(gè)文本文本文件文件“w w” ( (只寫只寫) )為為輸出輸出打開(kāi)一個(gè)打開(kāi)一個(gè)文本文本文件文件“a a” ( (追加追加) )向向文本文本文件尾增加數(shù)據(jù)文件尾增加數(shù)據(jù)“rbrb” ( (只讀只讀) )為為輸入輸入打開(kāi)一個(gè)打開(kāi)一個(gè)二進(jìn)制二進(jìn)制文件文件“wbwb” ( (只寫只寫) )為為輸出輸出打開(kāi)一個(gè)打開(kāi)一個(gè)二進(jìn)制二進(jìn)制文件文件abab“ ( (追加追加) )向

8、向二進(jìn)制二進(jìn)制文件尾增加數(shù)據(jù)文件尾增加數(shù)據(jù)r+r+“ ( (讀寫讀寫) )為為讀讀/ /寫寫打開(kāi)一個(gè)打開(kāi)一個(gè)文本文本文件文件w+w+” ( (讀寫讀寫) )為為讀讀/ /寫建立寫建立一個(gè)新的一個(gè)新的文本文本文件文件a+a+” ( (讀寫讀寫) )為讀為讀/ /寫打開(kāi)一個(gè)文本文件寫打開(kāi)一個(gè)文本文件rb+rb+“ ( (讀寫讀寫) )為讀為讀/ /寫打開(kāi)一個(gè)寫打開(kāi)一個(gè)二進(jìn)制二進(jìn)制文件文件“wb+wb+“ ( (讀寫讀寫) )為讀為讀/ /寫寫建立建立一個(gè)新的一個(gè)新的二進(jìn)制二進(jìn)制文件文件“ab+ab+” ( (讀寫讀寫) )為讀為讀/ /寫打開(kāi)一個(gè)寫打開(kāi)一個(gè)二進(jìn)制二進(jìn)制文件文件13.3 13.3 文

9、件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉( (續(xù)續(xù)) )二.文件的關(guān)閉(fclose函數(shù))函數(shù)調(diào)用:fclose(文件指針);函數(shù)功能: 使文件指針變量不指向該文件,也就是文件指針變量與文件“脫鉤”,此后不能再通過(guò)該指針對(duì)原來(lái)與其相聯(lián)系的文件進(jìn)行讀寫操作。返回值:關(guān)閉成功返回值為;否則返回EOF(-1) 。13.4 13.4 文件的讀寫文件的讀寫一、字符輸入輸出函數(shù)(fputs()和fgets()fputs函數(shù)函數(shù)調(diào)用:fputs ( ch,fp ) ; 函數(shù)功能: 將字符(ch的值)輸出到fp所指向的文件中去。 返回值:如果輸出成功,則返回值就是輸出的字符;如果輸出失敗,則返回一個(gè)EOF。13.4 1

10、3.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fgets函數(shù)函數(shù)調(diào)用:chfgets(fp);函數(shù)功能: 從指定的文件讀入一個(gè)字符,該文件必須是以讀或讀寫方式打開(kāi)的。 返回值:讀取成功一個(gè)字符,賦給。如果遇到文件結(jié)束符,返回一個(gè)文件結(jié)束標(biāo)志EOF 。13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )常見(jiàn)的讀取字符操作從一個(gè)文本文件順序讀入字符并在屏幕上顯示出來(lái): ch = fgetc(fp); while(ch!=EOF) putchar(ch); ch = fgetc(fp); 注意:EOF不是可輸出字符,因此不能在屏幕上顯示。由于字符的ASCII碼不可能出現(xiàn),因此EOF定義為是合適的。

11、當(dāng)讀入的字符值等于時(shí),表示讀入的已不是正常的字符而是文件結(jié)束符。 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )常見(jiàn)的讀取字符操作從一個(gè)二進(jìn)制文件順序讀入字符: while(!feof(fp) ch = fgetc(fp); 注意:ANSI C提供一個(gè)feof()函數(shù)來(lái)判斷文件是否真的結(jié)束。如果是文件結(jié)束,函數(shù)feof(fp)的值為(真);否則為(假)。以上也適用于文本文件的讀取。 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fputc和fgetc函數(shù)使用舉例:例例3 3從鍵盤輸入一些字符,逐個(gè)把它們送到從鍵盤輸入一些字符,逐個(gè)把它們送到磁盤上去,直到輸入一個(gè)磁盤上去,直

12、到輸入一個(gè)“”為止。為止。 #include #include void main(void) FILE *fp; char ch,10; scanf(%s,); if(fp=fopen(,w)=NULL) printf(cannot open filen); exit(0); /*終止程序*/ ch=getchar( ); /*接收?qǐng)?zhí)行scanf語(yǔ)句時(shí)最后輸入的回車符 */ ch=getchar( ); /* 接收輸入的第一個(gè)字符 */ while(ch!=# fputc(ch,fp);putchar(ch); ch=getchar(); fclose(fp); 運(yùn)行情況如下: (輸入磁盤文

13、件名) (輸入一個(gè)字符串) (輸出一個(gè)字符串) 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fputc和fgetc函數(shù)使用舉例:例例3 3將一個(gè)磁盤文件中的信息復(fù)制到另一個(gè)磁將一個(gè)磁盤文件中的信息復(fù)制到另一個(gè)磁盤文件中盤文件中 。 #include #include main( )FILE *in,*out; char ch,in,out; printf(Enter the in:n); scanf(%s,infile); printf(Enter the out:n); scanf(%s,outfile); if(in=fopen(infile,r)=NULL) printf(c

14、annot open infilen); exit(0); if(out=fopen(outfile,w)=NULL) printf(cannot open outfilen); exit(0); while(!feof(in)fputc(fgetc(in),out); fclose(in); fclose(out);運(yùn)行情況如下: (輸入原有磁盤文件名 n:(輸入新復(fù)制的磁盤文件名)程序運(yùn)行結(jié)果是將文件中的內(nèi)容復(fù)制到中去。 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fputc和fgetc函數(shù)使用舉例:例例3 3的改進(jìn):復(fù)制一個(gè)二進(jìn)制文件,利用的改進(jìn):復(fù)制一個(gè)二進(jìn)制文件,利用ma

15、inmain參數(shù),在輸入命令行是將兩個(gè)文件名輸入。參數(shù),在輸入命令行是將兩個(gè)文件名輸入。 #include #include main(int argc,char *argv )FILE *in,*out; char ch; if (argc!=3) printf(You forgot to enter a n);exit(0); if(in=fopen(argv1,rb)=NULL)printf(cannot open infilen); exit(0); if(out=fopen(argv2,wb)=NULL) printf(cannot open outfilen); exit(0);

16、while(!feof(in) fputc(fgetc(in),out); fclose(in); fclose(out);運(yùn)行方法:設(shè)經(jīng)編譯連接后得到的可執(zhí)行文件名為a.exe,則在DOS命令工作方式下,可以輸入以下的命令行:a 和,分別輸入到和中,的內(nèi)容為a,的值等于 。13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )二、數(shù)據(jù)塊讀寫函數(shù)(fread()和fwrite()函數(shù)調(diào)用:fread (buffer,size,count,fp);fwrite(buffer,size,count,fp); 參數(shù)說(shuō)明:buffer:是一個(gè)指針。對(duì)fread 來(lái)說(shuō),它是讀入數(shù)據(jù)的存放地址。對(duì)fwr

17、ite來(lái)說(shuō),是要輸出數(shù)據(jù)的地址(均指起始地址)。size: 要讀寫的字節(jié)數(shù)。count: 要進(jìn)行讀寫多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng)。fp: 文件型指針。13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) ) 使用舉例: 若文件以二進(jìn)制形式打開(kāi): fread(f,4,2,fp); 此函數(shù)從fp所指向的文件中讀入2個(gè)4個(gè)字節(jié)的數(shù) 據(jù),存儲(chǔ)到數(shù)組f中。13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )使用舉例:若有如下結(jié)構(gòu)類型:struct student_typechar name10; int num; int age; char addr30;stud40;可以用fread和fwrite來(lái)

18、進(jìn)行數(shù)據(jù)的操作:for(;) fread(&studi,sizeof(struct student-type),1,fp); for(;,)fwrite(&studi,sizeof(struct student-type),1,fp); 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )使用舉例:例3從鍵盤輸入個(gè)學(xué)生的有關(guān)數(shù)據(jù),然后把它們轉(zhuǎn)存到磁盤文件上去。 #include #define SIZE 4struct student_typechar name10; int num; int age; char addr15;studSIZE; /*定義結(jié)構(gòu)*/13.4

19、13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) ) void save( )FILE *fp; int i; if(fp=fopen(stu-list,wb)=NULL) printf(cannot open filen); return; for(i=0;iSIZE;i+)/*二進(jìn)制寫*/ if(fwrite(&studi,sizeof(struct student_type),1,fp)!=1) printf(“ errorn”);/*出錯(cuò)處理*/ fclose(fp); /*關(guān)閉文件*/ main()int i; for(i=0;iSIZE;i+)/*從鍵盤讀入學(xué)生信息*/scanf

20、(%s%d%d%s,,&studi.num, &studi.age,studi.addr);save( );/*調(diào)用save()保存學(xué)生信息*/運(yùn)行情況如下:輸入個(gè)學(xué)生的姓名、學(xué)號(hào)、年齡和地址: Z- F - T - L - 驗(yàn)證在磁盤文件“-”中是否已存在此數(shù)據(jù),用以下程序從“-”文件中讀入數(shù)據(jù),然后在屏幕上輸出。 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) ) #include #define SIZE 4 struct student_typechar name10; int num; int age; char addr15;studSIZ

21、E; main( )int i;fp=fopen(stu-list,rb);for(i=0;iSIZE;i+) fread(&studi,sizeof(struct student_type),1,fp); printf(%-10s %4d %4d %-15sn,, studi.num,studi. age,studi.addr); fclose (fp);屏幕上顯示出以下信息:Z -F -T -L - 如果已有的數(shù)據(jù)已經(jīng)以二進(jìn)制形式存儲(chǔ)在一個(gè)磁盤文件“-”中,要求從其中讀入數(shù)據(jù)并輸出到“-”文件中,可以編寫一個(gè)函數(shù),從磁盤文件中讀二進(jìn)制數(shù)據(jù)。 13.4 13.4

22、文件的讀寫文件的讀寫( (續(xù)續(xù)) ) void load( ) FILE *fp;int i; if(fp=fopen(stu-dat,rb)=NULL) printf(cannot open infilen); return; for(i=0;iSIZE;i+) if(fread(&studi,sizeof(struct student_type),1,fp)!=1) if(feof(fp) fclose(fp); return; printf( errorn); fclose (fp); 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )三、格式化讀寫函數(shù)(fprintf()

23、和fscanf()函數(shù)調(diào)用:fprintf ( 文件指針,格式字符串,輸出表列);fscanf ( 文件指針,格式字符串,輸入表列); 函數(shù)功能: 從磁盤文件中讀入或輸出字符。 例:fprintf(fp,”%d,%6.2f”,i,t);Fscanf (fp,”%d,%f”,&i,&t);注意:用fprintf和fscanf函數(shù)對(duì)磁盤文件讀寫,使用方便,容易理解,但由于在輸入時(shí)要將ASCII碼轉(zhuǎn)換為二進(jìn)制形式,在輸出時(shí)又要將二進(jìn)制形式轉(zhuǎn)換成字符,花費(fèi)時(shí)間比較多。因此,在內(nèi)存與磁盤頻繁交換數(shù)據(jù)的情況下,最好不用fprintf和fscanf函數(shù),而用fread和fwrite函數(shù)。13

24、.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )三、其他讀寫函數(shù)putw()和getw()函數(shù)調(diào)用:putw(int i,FILE * fp);int i = getw(FILE * fp); 函數(shù)功能: 對(duì)磁盤文件中讀寫一個(gè)字(整數(shù))。 例:putw(10,fp);i = getw(fp);putw函數(shù)定義如下:putw(int I,FILE *fp) char s; s=&I; putc(s0,fp); putc(s1,fp); return i; gutwgutw函數(shù)定義如下:函數(shù)定義如下:gutw(FILE *fp) char s; s=char *&i; s0 =

25、 getc(fp); s1 = getc(fp); return i; 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )用戶自定義讀取其他類型數(shù)據(jù)的函數(shù)。向磁盤文件寫一個(gè)實(shí)數(shù)(用二進(jìn)制方式)的函數(shù)putfloat :putfloat(float num,FILE *fp)char s;int count;s = (char*)#for(count = 0;count 4;count+)putc(scount,fp); 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fgets函數(shù)函數(shù)作用:從指定文件讀入一個(gè)字符串。函數(shù)調(diào)用:fgets(str,n,fp);從fp

26、指向的文件輸入n-1個(gè)字符,在最后加一個(gè)0。返回值:str的首地址。13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fputs函數(shù)函數(shù)作用:向指定的文件輸出一個(gè)字符串。函數(shù)調(diào)用:fgets(“china”,fp);第一個(gè)參數(shù)可以是字符串常量、字符數(shù)組名或字符型指針。字符串末尾的不輸出。 返回值:輸入成功,返回值為0;輸入失敗,返回EOF。13.5 13.5 文件的定位文件的定位rewind函數(shù)函數(shù)作用:使位置指針重新返回文件的開(kāi)頭,無(wú)返回值。應(yīng)用舉例應(yīng)用舉例:例例3 3有一個(gè)磁盤文件,第一次將它的內(nèi)容顯示在屏幕上,第二次把它復(fù)制到另一文件上。 #include main()FILE *

27、fp1,*fp2; fp1=fopen(,r);fp2=fopen(,w); while(!feof(fp1) putchar(getc(fp1); rewind(fp1);while(!feof(fp1) putc(getc(fp1),fp2); fclose(fp1);fclose(fp2); 13.5 13.5 文件的定位文件的定位順序讀寫和隨機(jī)讀寫順序讀寫:順序讀寫:位置指針按字節(jié)位置順序移動(dòng)。隨機(jī)讀寫隨機(jī)讀寫:讀寫完上一個(gè)字符(字節(jié))后,并不一定要讀寫其后續(xù)的字符(字節(jié)),而可以讀些文件中任意位置上所需要的字符(字節(jié))。 13.5 13.5 文件的定位文件的定位fseek函數(shù)(一般用

28、于二進(jìn)制文件)函數(shù)功能:函數(shù)功能:改變文件的位置指針。函數(shù)調(diào)用形式函數(shù)調(diào)用形式:fseek(文件類型指針,位移量,起始點(diǎn))起始點(diǎn):文件開(kāi)頭 SEEK_SET 0 文件當(dāng)前位置 SEEK_CUR 1 文件末尾 SEEK_END 2位移量:以起始點(diǎn)為基點(diǎn),向前移動(dòng)的字節(jié)數(shù)。一般 要求為long型。 13.5 13.5 文件的定位文件的定位fseek函數(shù)應(yīng)用舉例fseek(fpfseek(fp,100L100L,);,);將位置指針移到離文件頭將位置指針移到離文件頭100100個(gè)字節(jié)處。個(gè)字節(jié)處。fseek(fpfseek(fp,50L50L, ););將位置指針移到離當(dāng)前位置將位置指針移到離當(dāng)前位

29、置5050個(gè)字節(jié)處。個(gè)字節(jié)處。fseek(fpfseek(fp,50L50L, ););將位置指針從文件末尾處向后退個(gè)字節(jié)。將位置指針從文件末尾處向后退個(gè)字節(jié)。 13.5 13.5 文件的定位文件的定位例例3 3在磁盤文件上存有個(gè)學(xué)生的數(shù)據(jù)。要求在磁盤文件上存有個(gè)學(xué)生的數(shù)據(jù)。要求將第、個(gè)學(xué)生數(shù)據(jù)輸入計(jì)算機(jī),并將第、個(gè)學(xué)生數(shù)據(jù)輸入計(jì)算機(jī),并在屏幕上顯示出來(lái)。在屏幕上顯示出來(lái)。 #include #include #include#include struct student_typestruct student_type char name10; char name10; int num; in

30、t num; int age; int age; char sex; char sex; stud10; stud10; main()main() int i;int i; FILE FILE * *fp;fp; if(fp=fopen(stud-dat,rb)=NULL)if(fp=fopen(stud-dat,rb)=NULL) printf(can not open filen); printf(can not open filen); exit(0); exit(0); for(i=0;i10;i+=2) for(i=0;i10;i+=2) fseek(fp,ifseek(fp,i*

31、*sizeof(struct student_type),0);sizeof(struct student_type),0); fread(&studi, sizeof(struct student_type),1,fp);fread(&studi, sizeof(struct student_type),1,fp);printf(printf(“%s %d %d %cn%s %d %d %cn”,,, studi.num,studi.age,studi.sex);studi.num,studi.age,studi.sex); fclose(fp) fclose(fp)13.5 13.5 文件的定位文件的定位ftell函數(shù)函數(shù)作用:得到流式文件中的當(dāng)前位置,用相對(duì)于文件開(kāi)頭的位移量來(lái)表示。返回值:返回當(dāng)前位置,出錯(cuò)時(shí)返回-1L。應(yīng)用舉例:i = ftell(fp);if(i=-1L) print

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論