第十三章文件(1)課件_第1頁(yè)
第十三章文件(1)課件_第2頁(yè)
第十三章文件(1)課件_第3頁(yè)
第十三章文件(1)課件_第4頁(yè)
第十三章文件(1)課件_第5頁(yè)
已閱讀5頁(yè),還剩27頁(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、 第十章第十章 文件文件C C文件概述文件概述文件類型指針文件類型指針文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉文件的讀寫(xiě)文件的讀寫(xiě)文件的定位文件的定位出錯(cuò)的檢測(cè)出錯(cuò)的檢測(cè) 10.1 10.1 C C文件概述文件概述n 文件:存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合文件:存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合, ,是操作是操作系統(tǒng)數(shù)據(jù)管理的單位系統(tǒng)數(shù)據(jù)管理的單位文件分類文件分類 按文件的邏輯結(jié)構(gòu):按文件的邏輯結(jié)構(gòu):記錄文件:記錄文件:由具有一定結(jié)構(gòu)的記錄組成(定長(zhǎng)和不定長(zhǎng))由具有一定結(jié)構(gòu)的記錄組成(定長(zhǎng)和不定長(zhǎng))流式文件:流式文件:由一個(gè)個(gè)字符(字節(jié))數(shù)據(jù)順序組成由一個(gè)個(gè)字符(字節(jié))數(shù)據(jù)順序組成按存儲(chǔ)介質(zhì):按存儲(chǔ)介質(zhì):普通文件:

2、普通文件:存儲(chǔ)介質(zhì)文件(磁盤(pán)、磁帶等)存儲(chǔ)介質(zhì)文件(磁盤(pán)、磁帶等)設(shè)備文件設(shè)備文件:非存儲(chǔ)介質(zhì)(鍵盤(pán)、顯示器、打印機(jī)等):非存儲(chǔ)介質(zhì)(鍵盤(pán)、顯示器、打印機(jī)等)按數(shù)據(jù)的組織形式:按數(shù)據(jù)的組織形式:文本文件:文本文件: ASCIIASCII文件,每個(gè)字節(jié)存放一個(gè)字符文件,每個(gè)字節(jié)存放一個(gè)字符ASCIIASCII碼碼二進(jìn)制文件:二進(jìn)制文件:數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣存放數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣存放如如 intint型數(shù)型數(shù)100001000000100111000100000010011100010000內(nèi)存存儲(chǔ)形式內(nèi)存存儲(chǔ)形式0010011100010000001001110001000

3、0二進(jìn)制形式二進(jìn)制形式00110001001100000011000000110000001100000011000100110000001100000011000000110000ASCIIASCII形式形式文本文件特點(diǎn)文本文件特點(diǎn): :存儲(chǔ)量大、速度慢、便于對(duì)字符操作存儲(chǔ)量大、速度慢、便于對(duì)字符操作二進(jìn)制文件特點(diǎn)二進(jìn)制文件特點(diǎn): :存儲(chǔ)量小、速度快、便于存放中間結(jié)果存儲(chǔ)量小、速度快、便于存放中間結(jié)果l 文件特點(diǎn):文件特點(diǎn):n緩沖文件系統(tǒng):緩沖文件系統(tǒng):高級(jí)文件系統(tǒng),系統(tǒng)自高級(jí)文件系統(tǒng),系統(tǒng)自動(dòng)為正在使用的文件開(kāi)辟內(nèi)存緩沖區(qū)動(dòng)為正在使用的文件開(kāi)辟內(nèi)存緩沖區(qū)n非緩沖文件系統(tǒng):非緩沖文件系統(tǒng):低

4、級(jí)文件系統(tǒng),由用低級(jí)文件系統(tǒng),由用戶在程序中為每個(gè)文件設(shè)定緩沖區(qū)戶在程序中為每個(gè)文件設(shè)定緩沖區(qū)l 文件處理方法文件處理方法磁盤(pán)文件磁盤(pán)文件輸出文件緩沖區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)輸入文件緩沖區(qū)程序數(shù)據(jù)區(qū)程序數(shù)據(jù)區(qū)a緩沖文件系統(tǒng):緩沖文件系統(tǒng):緩沖區(qū)緩沖區(qū)指令區(qū)指令區(qū)程序程序用戶數(shù)據(jù)區(qū)用戶數(shù)據(jù)區(qū)磁盤(pán)磁盤(pán)非緩沖文件系統(tǒng):非緩沖文件系統(tǒng):l文件結(jié)構(gòu)體文件結(jié)構(gòu)體FILEFILEn 緩沖文件系統(tǒng)為每個(gè)正使用的文件在內(nèi)存開(kāi)辟文緩沖文件系統(tǒng)為每個(gè)正使用的文件在內(nèi)存開(kāi)辟文件信息區(qū)件信息區(qū)n文件信息用系統(tǒng)定義的名為文件信息用系統(tǒng)定義的名為FILEFILE的結(jié)構(gòu)體描述的結(jié)構(gòu)體描述nFILEFILE定義在定義在s

5、tdio.hstdio.h中中typedef structtypedef struct int _fd; int _fd; /文件號(hào)文件號(hào) int _cleft; int _cleft; /緩沖區(qū)中剩下的字符數(shù)緩沖區(qū)中剩下的字符數(shù) int _mode; int _mode; /文件操作方式文件操作方式 char char * *_next; _next; /文件當(dāng)前讀寫(xiě)位置文件當(dāng)前讀寫(xiě)位置 char char * *_buff; _buff; /文件緩沖區(qū)位置文件緩沖區(qū)位置 FILE;FILE;10.210.2 文件類型指針文件類型指針n 文件類型指針文件類型指針n指針變量說(shuō)明:指針變量說(shuō)明:

6、 FILE FILE * *fp;fp;n用法:用法:n文件打開(kāi)時(shí),系統(tǒng)自動(dòng)建立文件結(jié)構(gòu)體,并文件打開(kāi)時(shí),系統(tǒng)自動(dòng)建立文件結(jié)構(gòu)體,并把指向它的指針?lè)祷貋?lái),程序通過(guò)這個(gè)指針把指向它的指針?lè)祷貋?lái),程序通過(guò)這個(gè)指針獲得文件信息獲得文件信息, ,訪問(wèn)文件訪問(wèn)文件n文件關(guān)閉后,它的文件結(jié)構(gòu)體被釋放。文件關(guān)閉后,它的文件結(jié)構(gòu)體被釋放。&C C文件操作用文件操作用庫(kù)函數(shù)庫(kù)函數(shù)實(shí)現(xiàn)實(shí)現(xiàn), ,包含在包含在stdio.hstdio.h&文件使用方式文件使用方式: :打開(kāi)文件打開(kāi)文件-文件讀文件讀/ /寫(xiě)寫(xiě)-關(guān)閉文件關(guān)閉文件&系統(tǒng)系統(tǒng)自動(dòng)自動(dòng)打開(kāi)和關(guān)閉三個(gè)打開(kāi)和關(guān)閉三個(gè)標(biāo)準(zhǔn)文件標(biāo)準(zhǔn)文件:n標(biāo)

7、準(zhǔn)輸入標(biāo)準(zhǔn)輸入-鍵盤(pán)鍵盤(pán) stdinstdinn標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)輸出-顯示器顯示器 stdoutstdoutn標(biāo)準(zhǔn)出錯(cuò)輸出標(biāo)準(zhǔn)出錯(cuò)輸出-顯示器顯示器 stderrstderr10.310.3 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉l 打開(kāi)文件打開(kāi)文件fopenfopen功能:按指定方式打開(kāi)文件功能:按指定方式打開(kāi)文件返值:正常打開(kāi),為指向文件結(jié)構(gòu)體的指針;打返值:正常打開(kāi),為指向文件結(jié)構(gòu)體的指針;打開(kāi)失敗,為開(kāi)失敗,為NULLNULL使用文件方式使用文件方式l 函數(shù)原型:函數(shù)原型:FILE FILE * *fopenfopen(char (char * *namename,char ,char * *m

8、odemode) )打開(kāi)的文件名打開(kāi)的文件名 文件使用方式文件使用方式:“r+/rb+”(r+/rb+”(讀寫(xiě)讀寫(xiě)) )“a/ab” (a/ab” (追加追加) )“w/wb” (w/wb” (只寫(xiě)只寫(xiě)) )“r/rb” (r/rb” (只讀只讀) )“w+/wb+”(w+/wb+”(讀寫(xiě)讀寫(xiě)) )“a+/ab+”(a+/ab+”(讀寫(xiě)讀寫(xiě)) )為為輸入輸入打開(kāi)一個(gè)文本打開(kāi)一個(gè)文本/ /二進(jìn)制文件二進(jìn)制文件為為輸出輸出打開(kāi)或建立一個(gè)文本打開(kāi)或建立一個(gè)文本/ /二進(jìn)制文件二進(jìn)制文件為讀為讀/ /寫(xiě)打開(kāi)一個(gè)文本寫(xiě)打開(kāi)一個(gè)文本/ /二進(jìn)制文件二進(jìn)制文件為讀為讀/ /寫(xiě)建立一個(gè)文本寫(xiě)建立一個(gè)文本/ /

9、二進(jìn)制文件二進(jìn)制文件為讀為讀/ /寫(xiě)打開(kāi)或建立一個(gè)文本寫(xiě)打開(kāi)或建立一個(gè)文本/ /二進(jìn)制文件二進(jìn)制文件向文本向文本/ /二進(jìn)制文件尾二進(jìn)制文件尾追加追加數(shù)據(jù)數(shù)據(jù)文件使用方式文件使用方式含義含義說(shuō)明:為增強(qiáng)程序的可靠性,常用下面的方法打說(shuō)明:為增強(qiáng)程序的可靠性,常用下面的方法打開(kāi)一個(gè)文件:開(kāi)一個(gè)文件:例例 FILE FILE * *fp;fp; fp=fopen(“aa.c”,“w”); fp=fopen(“aa.c”,“w”); if( if(fp=fp=NULLNULL) ) printf(“File open error!n”); printf(“File open error!n”); e

10、xit(0);exit(0); 例例 FILE FILE * *fp;fp; fp= fopen (“ fp= fopen (“d:tcworktest.datd:tcworktest.dat”, “r”); ”, “r”); 例例 FILE FILE * *fp;fp; char char * *filename=“filename=“d:tcworktest.datd:tcworktest.dat” fp= fopen(filename,“r”); fp= fopen(filename,“r”); n作用作用: :使文件指針變量與文件使文件指針變量與文件“脫鉤脫鉤”,釋放文件結(jié),釋放文件結(jié)

11、構(gòu)體和文件指針構(gòu)體和文件指針n函數(shù)原型:函數(shù)原型:int fclose(FILE int fclose(FILE * *fp)fp)功能:關(guān)閉功能:關(guān)閉fpfp指向的文件指向的文件返值:正常關(guān)閉為返值:正常關(guān)閉為0;0;出錯(cuò)時(shí)出錯(cuò)時(shí), ,非非0 0文件打開(kāi)時(shí)返回的文件打開(kāi)時(shí)返回的文件類型指針文件類型指針l 文件關(guān)閉文件關(guān)閉fclosefclose磁盤(pán)文件磁盤(pán)文件輸出文件緩沖區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)輸入文件緩沖區(qū)程序數(shù)據(jù)區(qū)程序數(shù)據(jù)區(qū)a a緩沖文件系統(tǒng):緩沖文件系統(tǒng):fclosefclose不關(guān)閉文件可能會(huì)不關(guān)閉文件可能會(huì)丟失數(shù)據(jù)丟失數(shù)據(jù)n字符字符I/O:fputcI/O:fputc與與fg

12、etcfgetcnfputcfputcn函數(shù)原型函數(shù)原型:int fputc(char c, FILE int fputc(char c, FILE * *fp)fp)n功能:把一字節(jié)代碼功能:把一字節(jié)代碼c c寫(xiě)入寫(xiě)入fpfp指向的文件中,同時(shí)將讀寫(xiě)位指向的文件中,同時(shí)將讀寫(xiě)位置指針向前移動(dòng)置指針向前移動(dòng)1 1個(gè)字節(jié)個(gè)字節(jié)n返值:正常,返回返值:正常,返回c;c;出錯(cuò),為出錯(cuò),為EOFEOFl fgetc fgetcl 函數(shù)原型:函數(shù)原型:int fgetc(FILE int fgetc(FILE * *fp)fp)l 功能:從功能:從fpfp指向的文件中讀取一字節(jié)代碼,同時(shí)將讀寫(xiě)位置指指向

13、的文件中讀取一字節(jié)代碼,同時(shí)將讀寫(xiě)位置指針向前移動(dòng)針向前移動(dòng)1 1個(gè)字節(jié)個(gè)字節(jié)l 返值:正常,返回讀到的代碼值返值:正常,返回讀到的代碼值; ;讀到文件尾或出錯(cuò),為讀到文件尾或出錯(cuò),為EOFEOF10.410.4 文件的讀寫(xiě)文件的讀寫(xiě)關(guān)于符號(hào)常量關(guān)于符號(hào)常量EOF 在對(duì)在對(duì)ASCIIASCII碼文件執(zhí)行讀入操作時(shí),如果遇碼文件執(zhí)行讀入操作時(shí),如果遇到文件尾,則讀操作函數(shù)返回一個(gè)文件結(jié)束標(biāo)到文件尾,則讀操作函數(shù)返回一個(gè)文件結(jié)束標(biāo)志志EOFEOF(其值在頭文件其值在頭文件stdio.hstdio.h中被定義為中被定義為-1-1)。)。 在對(duì)二進(jìn)制文件執(zhí)行讀入操作時(shí),必須使在對(duì)二進(jìn)制文件執(zhí)行讀入操作

14、時(shí),必須使用庫(kù)函數(shù)用庫(kù)函數(shù)feof()feof()來(lái)判斷是否遇到文件尾。文件來(lái)判斷是否遇到文件尾。文件結(jié)束,返回非結(jié)束,返回非0 0(真);文件未結(jié)束,返回(真);文件未結(jié)束,返回0 0(假)。(假)。#include main() FILE *fp; char ch,*filename=“out.txt”; if(fp=fopen(filename,w)=NULL) printf(cannot open filen);exit(0); printf(Please input string:); ch=getchar(); while(ch!=#) fputc(ch,fp); ch=getch

15、ar(); fclose(fp);例:例: 從鍵盤(pán)輸入從鍵盤(pán)輸入一個(gè)字符序列,一個(gè)字符序列,并將其送入磁盤(pán)并將其送入磁盤(pán)文件中,字符串文件中,字符串以以“#”“#”作為結(jié)束作為結(jié)束標(biāo)志。標(biāo)志。例例: :讀文本文件讀文本文件內(nèi)容,并顯示內(nèi)容,并顯示#include main() FILE *fp; char ch,*filename=“out.txt”; if(fp=fopen(filename, r)=NULL) printf(cannot open filen); exit(0); while(ch=fgetc(fp)!=EOF) putchar(ch); fclose(fp);判斷文本文件

16、是否結(jié)束判斷文本文件是否結(jié)束例:將一個(gè)磁盤(pán)例:將一個(gè)磁盤(pán)文件中的信息復(fù)文件中的信息復(fù)制到另一個(gè)磁盤(pán)制到另一個(gè)磁盤(pán)文件中文件中#include main() FILE *in, *out; char ch,infile10,outfile10; scanf(%s,infile); scanf(%s,outfile); if (in = fopen(infile, rb)= NULL) printf(Cannot open infile.n); exit(0); if (out = fopen(outfile, wb)= NULL) printf(Cannot open outfile.n); e

17、xit(0); while (!feof(in) fputc(fgetc(in), out); fclose(in); fclose(out);l 函數(shù)原型:函數(shù)原型: size_t fread(void *buffer,size_t size, size_t count,FILE *fp) size_t fwrite(void *buffer,size_t size, size_t count,FILE *fp)l功能:讀功能:讀/ /寫(xiě)數(shù)據(jù)塊寫(xiě)數(shù)據(jù)塊l返值:成功,返回讀返值:成功,返回讀/ /寫(xiě)的塊數(shù);出錯(cuò)或文件尾,返回寫(xiě)的塊數(shù);出錯(cuò)或文件尾,返回0 0l說(shuō)明:說(shuō)明:typedef uns

18、igned size_t;typedef unsigned size_t;buffer: buffer: 指向要輸入指向要輸入/ /輸出數(shù)據(jù)塊的首地址的指針輸出數(shù)據(jù)塊的首地址的指針size: size: 每個(gè)要讀每個(gè)要讀/ /寫(xiě)的數(shù)據(jù)塊的大小(字節(jié)數(shù))寫(xiě)的數(shù)據(jù)塊的大小(字節(jié)數(shù))count: count: 要讀要讀/ /寫(xiě)的數(shù)據(jù)塊的個(gè)數(shù)寫(xiě)的數(shù)據(jù)塊的個(gè)數(shù)fp: fp: 要讀要讀/ /寫(xiě)的文件指針寫(xiě)的文件指針freadfread與與fwrite fwrite 一般用于一般用于二進(jìn)制文件二進(jìn)制文件的輸入的輸入/ /輸出輸出l數(shù)據(jù)塊數(shù)據(jù)塊I/O: freadI/O: fread與與fwritefwrit

19、e例 float f2; FILE *fp; fp=fopen(“aa.dat”,“rb”); fread(f,4,2,fp);for(i=0;i2;i+) fread(&fi,4,1,fp);例 struct student int num; char name20; char sex; int age; float score3; stud10; for(i=0;i10;i+) fread(&studi,sizeof(struct student),1,fp);例子例子n 格式化格式化I/O: fprintfI/O: fprintf與與fscanffscanfn函數(shù)原型:函

20、數(shù)原型:int fprintf(int fprintf(文件指針,格式字符串,輸出列表文件指針,格式字符串,輸出列表) )int fscanf(int fscanf(文件指針,格式字符串,輸入列表文件指針,格式字符串,輸入列表) )l 功能:按格式對(duì)文件進(jìn)行功能:按格式對(duì)文件進(jìn)行I/OI/O操作操作l 返值:成功返值:成功, ,返回返回I/OI/O的個(gè)數(shù)的個(gè)數(shù); ;出錯(cuò)或文件尾出錯(cuò)或文件尾, ,返回返回EOFEOF例例 fprintf(fp,“%d,%6.2f”,i,t); fprintf(fp,“%d,%6.2f”,i,t); / / /將將i i和和t t按按% %d,%6.2fd,%6.

21、2f格式輸出到格式輸出到fpfp文件文件 fscanf(fp,“%d,%f”,&i,&t); fscanf(fp,“%d,%f”,&i,&t); /若文件中有若文件中有3,4.5 ,3,4.5 ,則將則將3 3送入送入i, 4.5i, 4.5送入送入t t例例 從鍵盤(pán)按格式從鍵盤(pán)按格式輸入數(shù)據(jù)存到磁盤(pán)輸入數(shù)據(jù)存到磁盤(pán)文件中去文件中去#include main() char s80,c80; FILE *fp; if(fp=fopen(test,w)=NULL) puts(cant open file); exit(0) ; fscanf(stdin,%s ,s)

22、; fprintf(fp,%s ,s); fclose(fp); if(fp=fopen(test,r)=NULL) puts(cant open file); exit(0); fscanf(fp,%s,c); fprintf(stdout,%s,c); fclose(fp);l函數(shù)原型:函數(shù)原型:char *fgets(char *s, int n, FILE *fp) int fputs(char *s, FILE *fp)l功能:從功能:從fpfp指向的文件讀指向的文件讀/ /寫(xiě)一個(gè)字符串寫(xiě)一個(gè)字符串fgetsfgets從從fpfp所指文件讀所指文件讀n-1n-1個(gè)字符送入個(gè)字符送入s

23、 s指向的內(nèi)存區(qū)指向的內(nèi)存區(qū), ,并在最后加一個(gè)并在最后加一個(gè)0(0(若讀入若讀入n-1n-1個(gè)字符前遇換行符個(gè)字符前遇換行符或文件尾(或文件尾(EOFEOF)即結(jié)束即結(jié)束) )fputsfputs把把s s指向的字符串寫(xiě)入指向的字符串寫(xiě)入fpfp指向的文件指向的文件l 字符串字符串I/OI/O: fgets與與fputsl返值:返值:fgetsfgets正常時(shí)返回讀取字符串的首地址;正常時(shí)返回讀取字符串的首地址; 出錯(cuò)或文件尾,返回出錯(cuò)或文件尾,返回NULLNULL fputs fputs正常時(shí)返回寫(xiě)入的最后一個(gè)字符;出錯(cuò)為正常時(shí)返回寫(xiě)入的最后一個(gè)字符;出錯(cuò)為EOFEOF說(shuō)明:讀寫(xiě)函數(shù)的選用

24、原則說(shuō)明:讀寫(xiě)函數(shù)的選用原則從功能角度來(lái)說(shuō),從功能角度來(lái)說(shuō),fread()和和fwrite()函數(shù)可以完成函數(shù)可以完成文件的任何數(shù)據(jù)讀寫(xiě)操作。文件的任何數(shù)據(jù)讀寫(xiě)操作。 但為方便起見(jiàn),依下列原但為方便起見(jiàn),依下列原則選用:則選用:1讀讀/寫(xiě)寫(xiě)1個(gè)字符(或字節(jié))數(shù)據(jù)時(shí):選用個(gè)字符(或字節(jié))數(shù)據(jù)時(shí):選用fgetc()和和fputc()函數(shù)。函數(shù)。2讀讀/寫(xiě)寫(xiě)1個(gè)字符串時(shí):選用個(gè)字符串時(shí):選用fgets()和和fputs()函數(shù)。函數(shù)。3讀讀/寫(xiě)多個(gè)不含格式的數(shù)據(jù)時(shí):選用寫(xiě)多個(gè)不含格式的數(shù)據(jù)時(shí):選用fread()和和fwrite()函數(shù)。函數(shù)。4讀讀/寫(xiě)寫(xiě)1個(gè)(或多個(gè))含格式的數(shù)據(jù)時(shí):選用個(gè)(或多個(gè))

25、含格式的數(shù)據(jù)時(shí):選用fscanf()和和fprintf()函數(shù)。函數(shù)。 文件中有一個(gè)文件中有一個(gè)讀寫(xiě)位置指針讀寫(xiě)位置指針,指向當(dāng)前的讀寫(xiě)位,指向當(dāng)前的讀寫(xiě)位置。每次讀寫(xiě)置。每次讀寫(xiě)1 1個(gè)(或個(gè)(或1 1組)數(shù)據(jù)后,系統(tǒng)自動(dòng)將位置組)數(shù)據(jù)后,系統(tǒng)自動(dòng)將位置指針移動(dòng)到下一個(gè)讀寫(xiě)位置上。如果想改變系統(tǒng)這種指針移動(dòng)到下一個(gè)讀寫(xiě)位置上。如果想改變系統(tǒng)這種讀寫(xiě)規(guī)律實(shí)現(xiàn)隨機(jī)讀寫(xiě),可使用有關(guān)文件定位的函數(shù)。讀寫(xiě)規(guī)律實(shí)現(xiàn)隨機(jī)讀寫(xiě),可使用有關(guān)文件定位的函數(shù)。10.510.5 文件的定位文件的定位l rewind rewind函數(shù)函數(shù)l 函數(shù)原型:函數(shù)原型: void rewind(FILE void rewin

26、d(FILE * *fp)fp)l 功能功能: : 重置文件位置指針到文件開(kāi)頭重置文件位置指針到文件開(kāi)頭l 返值:無(wú)返值:無(wú)例例 對(duì)一個(gè)磁盤(pán)對(duì)一個(gè)磁盤(pán)文件先進(jìn)行顯示文件先進(jìn)行顯示然后把它復(fù)制到然后把它復(fù)制到另一文件中另一文件中# #include include main()main() FILE FILE * *fp1,fp1,* *fp2;fp2; fp1= fp1=fopen(“test1.c,r);fopen(“test1.c,r); fp2 fp2=fopen(“test2.c,w);=fopen(“test2.c,w); while while(!feof(fp1(!feof(fp

27、1) ) putchar(fgetc(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(fp1); fclose(fp2); fclose(fp2); n函數(shù)原型:函數(shù)原型:int fseek(FILE int fseek(FILE * *fp,long offset,int whence)fp,long offset,int whence)n功能:

28、改變文件位置指針的位置功能:改變文件位置指針的位置n返值:成功,返回返值:成功,返回0 0;失敗,返回非;失敗,返回非0 0值值fp: fp: 文件指針文件指針offset: offset: 位移量(以起始位移量(以起始點(diǎn)為基點(diǎn)點(diǎn)為基點(diǎn), ,移動(dòng)的字節(jié)數(shù)移動(dòng)的字節(jié)數(shù)) )00 向后移動(dòng)向后移動(dòng)00 向前移動(dòng)向前移動(dòng)whence: whence: 起始點(diǎn)起始點(diǎn)文件開(kāi)始文件開(kāi)始 SEEK_SET 0SEEK_SET 0文件當(dāng)前位置文件當(dāng)前位置 SEEK_CUR 1SEEK_CUR 1文件末尾文件末尾 SEEK_END 2SEEK_END 2例例 fseek(fp,100L,0);fseek(fp,

29、100L,0); fseek(fp,50L,1); fseek(fp,50L,1); fseek(fp,-10L,2); fseek(fp,-10L,2); l fseek fseek函數(shù)函數(shù)例例: :磁盤(pán)文件磁盤(pán)文件上有上有3 3個(gè)學(xué)生個(gè)學(xué)生數(shù)據(jù),要求讀數(shù)據(jù),要求讀入第入第1 1,3 3學(xué)生學(xué)生數(shù)據(jù)并顯示數(shù)據(jù)并顯示#include struct student_type int num; char name10; int age; char addr15;stud3;main() int i; FILE *fp; if(fp=fopen(studat,rb)=NULL) printf(can

30、t open filen);exit(0); for(i=0;i3;i+=2) fseek(fp,i*sizeof(struct student_type),0); fread(&studi,sizeof(struct student_type),1,fp); printf(%s %d %d %sn, ,studi.num,studi.age,studi.addr); fclose(fp);nftellftell函數(shù)函數(shù)n函數(shù)原型:函數(shù)原型: long ftell(FILE long ftell(FILE * *fp)fp)n功能:返回位置指針當(dāng)前位置功能:返回位置

31、指針當(dāng)前位置( (用相對(duì)文件開(kāi)頭用相對(duì)文件開(kāi)頭的位移量表示的位移量表示) )n返值:成功,返回當(dāng)前位置指針位置;失敗,返返值:成功,返回當(dāng)前位置指針位置;失敗,返回回-1-1L L,例例: : 求文件長(zhǎng)度求文件長(zhǎng)度# #includestdio.hincludestdio.h main() main() FILE FILE * *fp;fp; char filename80; char filename80; long length; long length; gets(filename);gets(filename); fp=fopen(filename,rb);fp=fopen(filename,rb); if(fp=NULL) if(fp=NULL) printf(file

溫馨提示

  • 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)論