C語言第章文件ppt課件_第1頁
C語言第章文件ppt課件_第2頁
C語言第章文件ppt課件_第3頁
C語言第章文件ppt課件_第4頁
C語言第章文件ppt課件_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第十三章第十三章l 本章要點l 主要內容13.1 13.1 文件概述文件概述13.2 13.2 文件類型指針文件類型指針13.3 13.3 文件的打開與關閉文件的打開與關閉13.4 13.4 文件的讀寫文件的讀寫13.5 13.5 文件的定位文件的定位13.6 13.6 出錯的檢測出錯的檢測13.7 13.7 文件輸入輸出小結文件輸入輸出小結 13.1 C13.1 C文件概述文件概述文件的定義所謂文件一般指存儲在外部介質(如磁盤磁帶)上數據的集合.操作系統(tǒng)是以文件為單位對數據進行管理的.文件文件程序程序數據區(qū)數據區(qū)輸出文件緩沖區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)輸入文件緩沖區(qū)13.1 C13.1 C

2、文件概述文件概述( (續(xù)續(xù)) )文件的分類從用戶觀點:特殊文件(標準輸入輸出文件或標準設備文件)普通文件(磁盤文件)從操作系統(tǒng)的角度看,每一個與主機相連的輸入輸出設備看作是一個文件。例:輸入文件:終端鍵盤 輸出文件:顯示屏和打印機文件的分類按數據的組織形式:ASCII文件(文本文件):每一個字節(jié)放一個ASCII代碼二進制文件:把內存中的數據按其在內存中的存儲形式原樣輸出到磁盤上存放.例:整數10000在內存中的存儲形式以及分別按ASCII碼形式和二進制形式輸出如下圖所示:13.1 C13.1 C文件概述文件概述( (續(xù)續(xù)) )13.1 C13.1 C文件概述文件概述( (續(xù)續(xù)) )文件的分類A

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

4、統(tǒng)進行的輸入輸出又稱為低級輸入輸出系統(tǒng)。13.1 C13.1 C文件概述文件概述( (續(xù)續(xù)) )說明:在UNIX系統(tǒng)下,用緩沖文件系統(tǒng)來處理文本文件,用非緩沖文件系統(tǒng)來處理二進制文件.ANSI C 標準只采用緩沖文件系統(tǒng)來處理文本文件和二進制文件.C語言中對文件的讀寫都是用庫函數來實現(xiàn).13.2 13.2 文件類型指針文件類型指針Turbo Turbo 在在stdio.hstdio.h文件中有以下的文件類型聲明:文件中有以下的文件類型聲明:typedef structtypedef struct short level; short level; * *緩沖區(qū)緩沖區(qū)“滿滿或或“空空的程度的程度

5、* * unsigned flags; unsigned flags; * *文件狀態(tài)標志文件狀態(tài)標志* * char fd; char fd; * *文件描述符文件描述符* * unsigned char hold; unsigned char hold; * *如無緩沖區(qū)不讀取字符如無緩沖區(qū)不讀取字符* * short bsize; short bsize; * *緩沖區(qū)的大小緩沖區(qū)的大小* * unsigned char unsigned char * *buffer;/buffer;/* *數據緩沖區(qū)的位置數據緩沖區(qū)的位置* */ / unsigned char unsigned ch

6、ar * *curp;/curp;/* *指針,當前的指向指針,當前的指向* */ / unsigned istemp;/ unsigned istemp;/* *臨時文件,指示器臨時文件,指示器* */ / short token;/ short token;/* *用于有效性檢查用于有效性檢查* */ /FILEFILE; 在緩沖文件系統(tǒng)中在緩沖文件系統(tǒng)中, ,每個被使用的文件都要在內存中開辟一每個被使用的文件都要在內存中開辟一FILEFILE類型的區(qū)類型的區(qū), ,存放文件的有關信息存放文件的有關信息. .13.2 13.2 文件類型指針文件類型指針( (續(xù)續(xù)) )FILEFILE類型的數

7、組:類型的數組:FILEFILEf f5 5; ;定義了一個結構體數組定義了一個結構體數組f f,它有,它有5 5個個元素,可以用來存放元素,可以用來存放5 5個文件的信息。個文件的信息。文件型指針變量文件型指針變量: :FILE FILE * *fpfp;fpfp是一個指向是一個指向FILEFILE類型結構體的指針類型結構體的指針變量??梢允棺兞?。可以使fpfp指向某一個文件的結構體變量,指向某一個文件的結構體變量,從而通過該結構體變量中的文件信息能夠訪問該文從而通過該結構體變量中的文件信息能夠訪問該文件。如果有個文件,一般應設個指針變量,使件。如果有個文件,一般應設個指針變量,使它們分別指

8、向個文件,以實現(xiàn)對文件的訪問。它們分別指向個文件,以實現(xiàn)對文件的訪問。13.3 13.3 文件的打開與關閉文件的打開與關閉一一. .文件的打開文件的打開(fopen(fopen函數函數) )函數調用函數調用: :FILE FILE * *fpfp;fpfpfopenfopen文件名,使用文件方式);文件名,使用文件方式);需要打開的文件名,也就是準備訪問的文件的名字;需要打開的文件名,也就是準備訪問的文件的名字;使用文件的方式(使用文件的方式(“讀讀還是還是“寫寫等);等);讓哪一個指針變量指向被打開的文件。讓哪一個指針變量指向被打開的文件。 13.3 13.3 文件的打開與關閉文件的打開與關

9、閉( (續(xù)續(xù)) )文件使用方式含文件使用方式含 義義 “r” (只讀只讀)為輸入打開一個文本文件為輸入打開一個文本文件“w” (只寫只寫)為輸出打開一個文本文件為輸出打開一個文本文件“a” (追加追加)向文本文件尾增加數據向文本文件尾增加數據“rb” (只讀只讀)為輸入打開一個二進制文件為輸入打開一個二進制文件“wb” (只寫只寫)為輸出打開一個二進制文件為輸出打開一個二進制文件ab“ (追加追加)向二進制文件尾增加數據向二進制文件尾增加數據r+“ (讀寫讀寫)為讀為讀/寫打開一個文本文件寫打開一個文本文件w+” (讀寫讀寫)為讀為讀/寫建立一個新的文本文件寫建立一個新的文本文件a+” (讀寫

10、讀寫)為讀為讀/寫打開一個文本文件寫打開一個文本文件rb+“ (讀寫讀寫)為讀為讀/寫打開一個二進制文件寫打開一個二進制文件“wb+“ (讀寫讀寫)為讀為讀/寫建立一個新的二進制文件寫建立一個新的二進制文件“ab+” (讀寫讀寫)為讀為讀/寫打開一個二進制文件寫打開一個二進制文件13.3 13.3 文件的打開與關閉文件的打開與關閉( (續(xù)續(xù)) )二二. .文件的關閉文件的關閉(fclose(fclose函數函數) )函數調用函數調用: :fclosefclose文件指針);文件指針);函數功能函數功能: : 使文件指針變量不指向該文件,也就是文件指針變使文件指針變量不指向該文件,也就是文件指針

11、變量與文件量與文件“脫鉤脫鉤”,此后不能再通過該指針對原來與,此后不能再通過該指針對原來與其相聯(lián)系的文件進行讀寫操作其相聯(lián)系的文件進行讀寫操作 返回值返回值: :關閉成功返回值為;否則返回關閉成功返回值為;否則返回EOF(-1) EOF(-1) 13.4 13.4 文件的讀寫文件的讀寫一一. .字符輸入輸出函數字符輸入輸出函數(fputc()(fputc()和和fgetc()fgetc()fputcfputc函數函數函數調用函數調用: :fputc ( chfputc ( ch,fp ) fp ) ; 函數功能函數功能: : 將字符將字符chch的值輸出到的值輸出到fpfp所指向的文件中去。所

12、指向的文件中去。 返回值返回值: :如果輸出成功,則返回值就是輸出的字符;如果輸出成功,則返回值就是輸出的字符;如果輸出失敗,則返回一個如果輸出失敗,則返回一個EOF.EOF.13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fgetcfgetc函數函數函數調用函數調用: :chchfgetcfgetcfpfp););函數功能函數功能: : 從指定的文件讀入一個字符從指定的文件讀入一個字符, ,該文件必須是以讀或該文件必須是以讀或讀寫方式打開的。讀寫方式打開的。 返回值返回值: :讀取成功一個字符,賦給。讀取成功一個字符,賦給。如果遇到文件結束符,返回一個文件結束標志如果遇到文件結束符,

13、返回一個文件結束標志EOFEOF,即,即-1 -1 。13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )常見的讀取字符操作常見的讀取字符操作從一個文本文件順序讀入字符并在屏幕上顯示出來:從一個文本文件順序讀入字符并在屏幕上顯示出來: ch = fgetcch = fgetcfpfp);); whilewhilechch!=EOF=EOF) putcharputcharchch);); ch = fgetcch = fgetcfpfp);); 注意:注意:EOFEOF不是可輸出字符,因此不能在屏幕上顯示。不是可輸出字符,因此不能在屏幕上顯示。由于字符的由于字符的ASCIIASCII碼不可能

14、出現(xiàn),因此碼不可能出現(xiàn),因此EOFEOF定義為定義為是合適的。當讀入的字符值等于時,表示讀入是合適的。當讀入的字符值等于時,表示讀入的已不是正常的字符而是文件結束符。的已不是正常的字符而是文件結束符。 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )常見的讀取字符操作常見的讀取字符操作從一個二進制文件順序讀入字符:從一個二進制文件順序讀入字符: whilewhile(?。ǎeoffeoffpfp) ch = fgetc ch = fgetcfpfp);); 注意:注意:ANSI CANSI C提供一個提供一個feoffeof()函數來判斷文件是否()函數來判斷文件是否真的結束。如果是

15、文件結束,函數真的結束。如果是文件結束,函數feoffeoffpfp的值為的值為(真);否則為假)。以上也適用于文本文件的讀取。(真);否則為假)。以上也適用于文本文件的讀取。 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fputc和fgetc函數使用舉例:例3從鍵盤輸入一些字符,逐個把它們送到磁盤上去,直到輸入一個“”為止。 #include #include void main(void) FILE *fp; char ch,filename10; scanf(%s,filename); if(fp=fopen(filename,w)=NULL) printf(cannot o

16、pen filen); exit(0); /*終止程序*/ ch=getchar( ); /*接收執(zhí)行scanf語句時最后輸入的回車符 */ ch=getchar( ); /* 接收輸入的第一個字符 */ while(ch!=# fputc(ch,fp);putchar(ch); ch=getchar(); fclose(fp); 運行情況如下: (輸入磁盤文件名) (輸入一個字符串) (輸出一個字符串) 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fputc和fgetc函數使用舉例:例3將一個磁盤文件中的信息復制到另一個磁盤文件中 。 #include #include main

17、( )FILE *in,*out; char ch,infile10,outfile10; printf(Enter the infile name:n); scanf(%s,infile); printf(Enter the outfile name:n); scanf(%s,outfile); if(in=fopen(infile,r)=NULL) printf(cannot open infilen); exit(0); if(out=fopen(outfile,w)=NULL) printf(cannot open outfilen); exit(0); while(!feof(in)

18、fputc(fgetc(in),out); fclose(in); fclose(out);運行情況如下: (輸入原有磁盤文件名 n:(輸入新復制的磁盤文件名)程序運行結果是將文件中的內容復制到中去。 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fputc和fgetc函數使用舉例:例3的改進:復制一個二進制文件,利用main參數,在輸入命令行是將兩個文件名輸入。 #include #include main(int argc,char *argv )FILE *in,*out; char ch; if (argc!=3) printf(You forgot to enter a f

19、ilenamen);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); while(!feof(in) fputc(fgetc(in),out); fclose(in); fclose(out);運行方法:設經編譯連接后得到的可執(zhí)行文件名為a.exe,則在DOS命令工作方式下,可以輸入以下的命令行:a 和,分別輸入到和中,的內容為a,的值等于 。13.4 13.4

20、文件的讀寫文件的讀寫( (續(xù)續(xù)) )二二. .數據塊讀寫函數數據塊讀寫函數(fread()(fread()和和fwrite()fwrite()函數調用函數調用: :fread (buffer,size,countfread (buffer,size,count,fp);fp);fwrite(buffer,size,count,fp); fwrite(buffer,size,count,fp); 參數說明:參數說明:bufferbuffer:是一個指針。:是一個指針。對對fread fread 來說,它是讀入數據的存放地址。來說,它是讀入數據的存放地址。對對fwritefwrite來說,是要輸出

21、數據的地址均指起始地址)。來說,是要輸出數據的地址均指起始地址)。sizesize: 要讀寫的字節(jié)數。要讀寫的字節(jié)數。countcount: 要進行讀寫多少個要進行讀寫多少個sizesize字節(jié)的數據項。字節(jié)的數據項。fpfp: 文件型指針。文件型指針。函數調用成功則返回值為函數調用成功則返回值為countcount。13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) ) 使用舉例:使用舉例: 若文件以二進制形式打開:若文件以二進制形式打開: fread(f,4,2,fp);fread(f,4,2,fp); 此函數從此函數從fpfp所指向的文件中讀入所指向的文件中讀入2 2個個4 4個字節(jié)的

22、數個字節(jié)的數 據,存儲到數組據,存儲到數組f f中。中。13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )使用舉例:使用舉例:若有如下結構類型:若有如下結構類型:struct student_typestruct student_typechar name10;char name10; int num; int num; int age; int age; char addr30;stud40; char addr30;stud40;可以用可以用freadfread和和fwritefwrite來進行數據的操作:來進行數據的操作:forfor;);)fread(&studfread

23、(&studi i,sizeof(struct student_type)sizeof(struct student_type),1 1,fp);fp); forfor;,);,)fwrite(&studfwrite(&studi i,sizeof(struct student_type)sizeof(struct student_type),1 1,fp);fp);13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )使用舉例:使用舉例:例例3 3從鍵盤輸入個學生的有關數據,然后把它們轉存從鍵盤輸入個學生的有關數據,然后把它們轉存到磁盤文件上去。到磁盤文件上去。 #

24、include #include #define SIZE 4#define SIZE 4struct student_typestruct student_type char name10;char name10; int num; int num; int age; int age; char addr15; char addr15;studSIZE; /studSIZE; /* *定義結構定義結構* */ /13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) ) void save( ) void save( )FILE FILE * *fp;fp; int i; int i; if(

25、fp=fopen(stu_list,wb)=NULL) if(fp=fopen(stu_list,wb)=NULL) printf(cannot open filen); printf(cannot open filen); return; return; for(i=0;iSIZE;i+)/ for(i=0;iSIZE;i+)/* *二進制寫二進制寫* */ / if(fwrite(&studi,sizeof(struct student_type),1,fp)!=1) if(fwrite(&studi,sizeof(struct student_type),1,fp)!=1

26、) printf(“file write errorn”);/ printf(“file write errorn”);/* *出錯處理出錯處理* */ / fclose(fp); / fclose(fp); /* *關閉文件關閉文件* */ / main()main()int i;int i; for(i=0;iSIZE;i+)/ for(i=0;iSIZE;i+)/* *從鍵盤讀入學生信息從鍵盤讀入學生信息* */ /scanf(%s%d%d%s,,&studi.num,scanf(%s%d%d%s,,&studi.num, &

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

28、addr15;studSIZE; main( )int i;FILE*fp;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 - 如果已有的數據已經以二進制形式存儲在一個磁盤文件如果已有的數據已經以二進制形式存儲在一個磁盤文件“_ _中,要求從其中讀

29、入數據并輸出到中,要求從其中讀入數據并輸出到“_ _文件中,可以編寫一個函數,文件中,可以編寫一個函數,從磁盤文件中讀二進制數據。從磁盤文件中讀二進制數據。 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) ) void load( ) void load( ) FILE FILE * *fp;int i;fp;int i; if(fp=fopen(stu_dat,rb)=NULL) if(fp=fopen(stu_dat,rb)=NULL) printf(cannot open infilen);printf(cannot open infilen); return; return; f

30、or(i=0;iSIZE;i+) for(i=0;iSIZE;i+) if(fread(&studi,sizeof(struct student_type),1,fp)!=1) if(fread(&studi,sizeof(struct student_type),1,fp)!=1) if(feof(fp) fclose(fp); return; if(feof(fp) fclose(fp); return; printf(file read errorn); printf(file read errorn); fclose (fp) fclose (fp); 13.4 13.

31、4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )三三. .格式化讀寫函數格式化讀寫函數(fprintf()(fprintf()和和fscanf()fscanf()函數調用函數調用: :fprintf ( fprintf ( 文件指針,格式字符串,輸出表列);文件指針,格式字符串,輸出表列);fscanf ( fscanf ( 文件指針,格式字符串,輸入表列);文件指針,格式字符串,輸入表列); 函數功能函數功能: : 從磁盤文件中讀入或輸出字符。從磁盤文件中讀入或輸出字符。 例:例:fprintf(fp,”%d,%6.2f”,i,t);fprintf(fp,”%d,%6.2f”,i,t);fscanf

32、 (fp,”%d,%f”,&i,&t);fscanf (fp,”%d,%f”,&i,&t);注意:用fprintf和fscanf函數對磁盤文件讀寫,使用方便,容易理解,但由于在輸入時要將ASCII碼轉換為二進制形式,在輸出時又要將二進制形式轉換成字符,花費時間比較多。因而,在內存與磁盤頻繁交換數據的情況下,最好不用fprintf和fscanf函數,而用fread和fwrite函數。13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )三三. .其他讀寫函數其他讀寫函數putw()putw()和和getw()getw()函數調用函數調用: :putw(int i

33、,FILE putw(int i,FILE * * fp) fp);int i = getw(FILE int i = getw(FILE * * fp) fp); 函數功能函數功能: : 對磁盤文件中讀寫一個字整數)。對磁盤文件中讀寫一個字整數)。 例:例:putw(10,fp);putw(10,fp);i = getw(fp);i = getw(fp);putw函數定義如下:putw(int I,FILE *fp) char s; s=&I; putc(s0,fp); putc(s1,fp); return i; gutwgutw函數定義如下:函數定義如下:gutw(FILE gu

34、tw(FILE * *fp)fp) char s; char s; s=char s=char * *&i;&i; s0 = getc(fp); s0 = getc(fp); s1 = getc(fp); s1 = getc(fp); return i; return i; 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )用戶自定義讀取其他類型數據的函數用戶自定義讀取其他類型數據的函數向磁盤文件寫一個實數用二進制方式的函數向磁盤文件寫一個實數用二進制方式的函數putfloat :putfloat :putfloat(float num,FILE putfloat(flo

35、at num,FILE * *fp)fp) char char * *s;s;int count;int count;s = (chars = (char* *)#)#for(count = 0;count 4;count+)for(count = 0;count 4;count+)fputc(scount,fp);fputc(scount,fp); 13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fgetsfgets函數函數函數作用:函數作用:從指定文件讀入一個字符串。從指定文件讀入一個字符串。函數調用:函數調用:fgets(str,n,fp);fge

36、ts(str,n,fp);從從fpfp指向的文件輸入指向的文件輸入n-1n-1個字符,在最后加一個個字符,在最后加一個00返回值:返回值:strstr的首地址的首地址13.4 13.4 文件的讀寫文件的讀寫( (續(xù)續(xù)) )fputsfputs函數函數函數作用:函數作用:向指定的文件輸出一個字符串。向指定的文件輸出一個字符串。函數調用:函數調用:fputs(“china”,fp);fputs(“china”,fp);第一個參數可以是字符串常量、字符數組名或字符型第一個參數可以是字符串常量、字符數組名或字符型指針。字符串末尾的指針。字符串末尾的不輸出。不輸出。 返回值:返回值:輸出成功,返回值為輸

37、出成功,返回值為0 0;輸出失敗,返回輸出失敗,返回EOF.EOF.13.5 13.5 文件的定位文件的定位rewind函數函數作用:使位置指針重新返回文件的開頭,無返回值。應用舉例:例3有一個磁盤文件,第一次將它的內容顯示在屏幕上,第二次把它復制到另一文件上。 #include #include main() main() FILE FILE * *fp1,fp1,* *fp2;fp2; fp1=fopen(file1.c,r);fp1=fopen(file1.c,r);fp2=fopen(file2.c,w);fp2=fopen(file2.c,w); while(!feof(fp1) p

38、utchar(fgetc(fp1); while(!feof(fp1) putchar(fgetc(fp1); rewind(fp1); rewind(fp1);while(!feof(fp1)while(!feof(fp1) fputc(fgetc(fp1),fp2); fputc(fgetc(fp1),fp2); fclose(fp1);fclose(fp2); fclose(fp1);fclose(fp2); 13.5 13.5 文件的定位文件的定位順序讀寫和隨機讀寫順序讀寫和隨機讀寫順序讀寫:順序讀寫:位置指針按字節(jié)位置順序移動。位置指針按字節(jié)位置順序移動。隨機讀寫:隨機讀寫:讀寫完上

39、一個字符字節(jié)后,并不一定要讀寫其讀寫完上一個字符字節(jié)后,并不一定要讀寫其后續(xù)的字符字節(jié)),而可以讀些文件中任意位置后續(xù)的字符字節(jié)),而可以讀些文件中任意位置上所需要的字符字節(jié))。上所需要的字符字節(jié))。 13.5 13.5 文件的定位文件的定位fseekfseek函數一般用于二進制文件)函數一般用于二進制文件)函數功能:函數功能:改變文件的位置指針改變文件的位置指針函數調用形式:函數調用形式:fseek(fseek(文件類型指針,位移量,起始點文件類型指針,位移量,起始點) )起始點:文件開頭起始點:文件開頭 SEEK_SET 0SEEK_SET 0 文件當前位置文件當前位置 SEEK_CUR

40、1SEEK_CUR 1 文件末尾文件末尾 SEEK_END 2SEEK_END 2位移量:以起始點為基點,向前移動的字節(jié)數。一般位移量:以起始點為基點,向前移動的字節(jié)數。一般 要求為要求為longlong型型 13.5 13.5 文件的定位文件的定位fseekfseek函數應用舉例函數應用舉例fseek(fpfseek(fp,100L100L,);,);將位置指針移到離文件頭將位置指針移到離文件頭100100個字節(jié)處個字節(jié)處fseek(fpfseek(fp,50L50L, ););將位置指針移到離當前位置將位置指針移到離當前位置5050個字節(jié)處個字節(jié)處fseek(fpfseek(fp,50L5

41、0L, ););將位置指針從文件末尾處向后退個字節(jié)將位置指針從文件末尾處向后退個字節(jié) 13.5 13.5 文件的定位文件的定位例3在磁盤文件上存有個學生的數據。要求將第、個學生數據輸入計算機,并在屏幕上顯示出來。 #include #include #include#include struct student_type struct student_type char name10; char name10; int num; int num; int age; int age; char sex; stud10; char sex; stud10; main() main() int i;

42、 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); exit(0); printf(can not open filen); exit(0); for(i=0;i10;i+=2) for(i=0;i10;i+=2) fseek(fp,i fseek(fp,i* *sizeof(struct student_type),0);sizeof(struct student_type),0); fread(&

43、studi, sizeof(struct student_type),1,fp); fread(&studi, sizeof(struct student_type),1,fp);printf(“%s %d %d %cn”,,printf(“%s %d %d %cn”,, studi.num,studi.age,studi.sex); studi.num,studi.age,studi.sex); fclose(fp) fclose(fp)13.5 13.5 文件的定位文件的定位ftellftell函數函數函數作用:函數作用:得到流式文件中的當前位置,用相對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論