C語言文件習(xí)題.ppt_第1頁
C語言文件習(xí)題.ppt_第2頁
C語言文件習(xí)題.ppt_第3頁
C語言文件習(xí)題.ppt_第4頁
C語言文件習(xí)題.ppt_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、a,0,文件,a,1,引子,文件,scanf getchar gets.,printf putchar puts.,a,2,第十一章 文件,本章學(xué)習(xí)要點(diǎn) 正確理解文件的概念,文件系統(tǒng)的特點(diǎn); 掌握文件指針的概念和定義方法; 熟練使用文件讀寫函數(shù),學(xué)會(huì)定位文件指針。,掌握本章內(nèi)容的捷徑: 對(duì)文件永遠(yuǎn)是:打開操作關(guān)閉 學(xué)會(huì)文件操作庫函數(shù)(即標(biāo)準(zhǔn)I/O庫函數(shù))的用法,a,3,第十一章 文件,文件概述 文件處理 文件順序讀寫 文件隨機(jī)操作 文件檢測(cè) 文件實(shí)例,a,4,11.1 文件概述,文件的定義 存儲(chǔ)在外部介質(zhì)上(如磁盤和磁帶等外存儲(chǔ)器)的數(shù)據(jù)或信息的集合。 例如:程序文件中保存著程序,而數(shù)據(jù)文件中

2、保存著數(shù)據(jù)。 main.cC語言源程序 文本文件 main.obj目標(biāo)文件 二進(jìn)制文件 main.exe可執(zhí)行文件 二進(jìn)制文件,a,5,11.1 文件概述,文件的性質(zhì) 文件是一個(gè)有序的數(shù)據(jù)序列,數(shù)據(jù)之間有著嚴(yán)格的排列次序關(guān)系,可以按照它們的排列順序,依次進(jìn)行訪問,也可以按照需要,訪問任意位置上的數(shù)據(jù)。,a,6,系統(tǒng)對(duì)文件的處理過程 系統(tǒng)對(duì)文件的處理過程就是對(duì)文件進(jìn)行輸入/輸出操作的過程。,文件,程序 數(shù)據(jù)區(qū),輸出文件緩沖區(qū),輸入文件緩沖區(qū),計(jì)算機(jī)內(nèi)存,計(jì)算機(jī)外存,寫文件稱為輸出,讀文件稱為輸入,a,7,11.1 文件概述,文件的分類,文本文件,二進(jìn)制文件,普通文件(磁盤文件),特殊文件(標(biāo)準(zhǔn)設(shè)

3、備文件),緩沖文件系統(tǒng),非緩沖文件系統(tǒng),a,8,從文件數(shù)據(jù)的組織形式(存儲(chǔ)格式)看 ASCII文件(或稱文本文件,即TEXT文件) 文本文件中的數(shù)據(jù)采用ASCII碼格式存儲(chǔ),全部數(shù)據(jù)轉(zhuǎn)換為ASCII碼。每個(gè)ASCII字符占1個(gè)字節(jié)。ASCII文件使用文本編輯器可直接閱讀。 二進(jìn)制文件 對(duì)數(shù)據(jù)在內(nèi)存中的二進(jìn)制存儲(chǔ)格式不做任何轉(zhuǎn)換,直接存入文件,形成二進(jìn)制文件。二進(jìn)制文件在操作系統(tǒng)下不能直接閱讀。,a,9,11.1 文件概述,例如:將整數(shù)1024分別存儲(chǔ)到ASCII文件和二進(jìn)制文件中,將采用不同的編碼形式,占用不同的字節(jié)長(zhǎng)度。,內(nèi)存中的存儲(chǔ)形式: 補(bǔ)碼,0000 0100 0000 0000,AS

4、CII文件:ASCII碼,二進(jìn)制文件:補(bǔ)碼,0000 0100 0000 0000,占4個(gè)字節(jié),占2個(gè)字節(jié),a,10,比較: ASCII文件中,每個(gè)字符以ASCII碼形式存儲(chǔ),方便對(duì)字符的逐個(gè)處理;在操作系統(tǒng)下或使用文本編輯器時(shí),可以直接閱讀、修改,方便與其它系統(tǒng)進(jìn)行數(shù)據(jù)交換。 缺點(diǎn)是占用磁盤存儲(chǔ)空間多,并且系統(tǒng)要付出將內(nèi)存中的二進(jìn)制形式轉(zhuǎn)為ASCII碼的時(shí)間開銷。 用二進(jìn)制形式輸出,可以節(jié)省磁盤空間和轉(zhuǎn)換時(shí)間,但輸出的數(shù)據(jù)因?yàn)槭莾?nèi)存中的格式,在操作系統(tǒng)下和一般的編輯器中不能直接識(shí)別。,a,11,11.1 文件概述,從用戶觀點(diǎn)看 普通文件(也稱為磁盤文件) 特殊文件(也稱為標(biāo)準(zhǔn)設(shè)備文件或標(biāo)準(zhǔn)I

5、/O文件) 普通文件是以磁盤為對(duì)象且無其它特殊性能的文件。 特殊文件是以終端為對(duì)象的標(biāo)準(zhǔn)的設(shè)備文件。,a,12,11.1 文件概述,在C語言中,“文件”的概念具有更廣泛的意義。與每臺(tái)主機(jī)相連的所有輸入輸出設(shè)備都看作是一個(gè)文件。即將實(shí)際的物理設(shè)備抽象為邏輯文件,它們也被稱為設(shè)備文件。 例如: 鍵盤是輸入文件 stdin(標(biāo)準(zhǔn)輸入文件) 顯示器是輸出文件 stdout(標(biāo)準(zhǔn)輸出文件) 打印機(jī)是輸出文件 PRN,a,13,11.1 文件概述,從C語言對(duì)文件的處理方法看 緩沖文件系統(tǒng) 非緩沖文件系統(tǒng) 緩沖文件系統(tǒng):對(duì)每個(gè)正在使用的文件,系統(tǒng)自動(dòng)在內(nèi)存中為其開辟一個(gè)文件緩沖區(qū)。稱為高級(jí)文件操作。 非緩沖

6、文件系統(tǒng):系統(tǒng)不會(huì)自動(dòng)開辟緩沖區(qū),文件緩沖區(qū)是由程序自己設(shè)置的。稱為低級(jí)文件操作。,a,14,11.1 文件概述,在83年以后ANSI C標(biāo)準(zhǔn)中取消了非緩沖文件系統(tǒng),對(duì)文本文件和二進(jìn)制文件均統(tǒng)一采用緩沖文件系統(tǒng)進(jìn)行處理。 本課程學(xué)習(xí): 緩沖式文件操作方式下,對(duì)磁盤文件進(jìn)行基本操作。對(duì)文本文件和二進(jìn)制文件有不同的處理方式。使用標(biāo)準(zhǔn)輸入/輸出庫(stdio.h)函數(shù)來實(shí)現(xiàn)文件操作。,a,15,第十一章 文件,文件概述 文件處理 文件順序讀寫 文件隨機(jī)操作 文件檢測(cè) 文件實(shí)例,a,16,文件類型 FILE 在緩沖文件系統(tǒng)中,用一個(gè) FILE 類型的結(jié)構(gòu)變量來描述一個(gè)文件,該結(jié)構(gòu)變量用于存放文件的有關(guān)

7、信息,如文件名、文件狀態(tài)等。 在C語言中,無論是一般磁盤文件還是設(shè)備文件,都要通過文件結(jié)構(gòu)的數(shù)據(jù)集合進(jìn)行輸入輸出處理。 文件結(jié)構(gòu)不需要用戶自己定義,是由系統(tǒng)事先定義好的,包含在頭文件 stdio.h 中,用戶可以直接使用。,11.2 文件處理,a,17,文件結(jié)構(gòu)類型FILE: typedef struct int _fd; /*文件位置指針,即當(dāng)前文件的讀寫位置*/ int _cleft; /* 文件緩沖區(qū)中剩余的字節(jié)數(shù) */ int _mode; /* 文件操作模式 */ char * nextc; /*用于文件讀寫的下一個(gè)字符位置*/ char * _buff; /* 文件緩沖區(qū)位置(指針

8、) */ FILE ; 文件結(jié)構(gòu)變量在打開文件時(shí)由操作系統(tǒng)自動(dòng)建立,用戶使用文件時(shí)無需重復(fù)定義。 在使用文件的時(shí)候要使用文件包含命令: #include ,類型說明語句typedef:定義新的類型來代替已有類型:typedef int INT,a,18,11.2 文件處理,如何引用文件結(jié)構(gòu)文件指針 C語言中對(duì)文件的操作都要通過指向該文件結(jié)構(gòu)的指針。 文件指針變量說明形式: FILE * 文件型指針變量名; 例如: FILE * fp; /* fp 是一個(gè)指針變量 */,文件指針是程序和文件聯(lián)系的紐帶,a,19,使用文件的一般步驟 打開文件 操作文件 關(guān)閉文件 打開文件:建立用戶程序與文件的聯(lián)系

9、,為文件開辟文件緩沖區(qū)。 操作文件:是指對(duì)文件的讀、寫、追加和定位操作: 讀操作:將文件中的數(shù)據(jù)讀入計(jì)算機(jī)。 寫操作:向文件輸出數(shù)據(jù)。 追加操作:將數(shù)據(jù)寫到原有數(shù)據(jù)的后面。 定位操作:移動(dòng)文件讀寫位置指針。 關(guān)閉文件:切斷文件與程序的聯(lián)系,將文件緩沖區(qū)的內(nèi)容寫入磁盤,并釋放文件緩沖區(qū)。,a,20,打開文件(fopen) fopen函數(shù)的調(diào)用形式是: FILE * fp; fp = fopen (文件名, 文件使用方式); 文件名:需要打開的文件名稱(字符串)。 文件使用方式:是具有特定含義的符號(hào)。 函數(shù)功能: 按指定的文件使用方式打開指定的文件。 若文件打開成功,則返回值為非NULL指針; 若

10、文件打開失敗,返回NULL。,為該文件建立一個(gè)文件結(jié)構(gòu)(變量),然后讓指針指向該文件結(jié)構(gòu),例:fp = fopen (file1, r),a,21,11.2 文件處理,文本文件的三種基本打開方式 “r”:只讀方式。為讀(輸入)文本文件打開文件。若文件不存在,則返回NULL。 “w”:只寫方式。為寫(輸出)文本文件打開文件。若文件不存在,則建立一個(gè)新文件;若文件已存在,則要將原來的文件清空。 “a”:追加方式。在文本文件的末尾增加數(shù)據(jù)。若文件已存在,則保持原來文件的內(nèi)容,將新的數(shù)據(jù)增加到原來數(shù)據(jù)的后面;若文件不存在,則創(chuàng)建。,a,22,二進(jìn)制文件的三種基本打開方式 “rb”:只讀方式 “wb”:

11、只寫方式 “ab”:追加方式 文件的其它打開方式 “r+”:可對(duì)文本文件進(jìn)行讀/寫操作。若文件不存在返回NULL;若文件存在,內(nèi)容不會(huì)被清空。 “w+”:可對(duì)文本文件進(jìn)行讀/寫操作。若文件已經(jīng)存在,則要先將文件原來的內(nèi)容清空。 “a+”:可對(duì)文本文件進(jìn)行讀/追加操作。 “rb+”:可對(duì)二進(jìn)制文件進(jìn)行讀/寫操作。 “wb+”:可對(duì)二進(jìn)制文件進(jìn)行讀/寫操作。 “ab+”:可對(duì)二進(jìn)制文件進(jìn)行讀/追加操作。,a,23,常見文件打開操作 if (fp = fopen (filename, r) = NULL ) printf (Cannot open file.n); exit (0); /*打開文件出

12、錯(cuò),調(diào)用庫函數(shù)終止程序*/ 含義:以只讀方式打開文件名為filename的文件。 文件名可以是從盤符開始的完整路徑名,也可以是相對(duì)路徑。,11.2 文件處理,a,24,11.2 文件處理,練習(xí):以下可作為函數(shù)fopen中第一個(gè)參數(shù)的正確格式是: A. c:usertext.txt B. c:usertext.txt C. c:usertext.txt D. c:usertext.txt,a,25,11.2 文件處理,char * pfilename; if (fp = fopen ( pfilename, r) = NULL ) printf (Cannot open file.n); exi

13、t (0); 含義:以只讀方式打開以 pfilename 指向的字符串為文件名的文件。,a,26,關(guān)閉文件(fclose) fclose函數(shù)的調(diào)用形式: FILE * fp; . fclose ( fp ); fp:已經(jīng)打開的文件指針。 函數(shù)功能 關(guān)閉fp指定的文件,切斷緩沖區(qū)與該文件的聯(lián)系,并釋放文件指針。 若文件關(guān)閉成功,返回值為0; 若文件關(guān)閉失敗,返回非0值。,a,27,11.2 文件處理,系統(tǒng)標(biāo)準(zhǔn)設(shè)備文件 標(biāo)準(zhǔn)設(shè)備文件由系統(tǒng)自動(dòng)打開和關(guān)閉,其文件結(jié)構(gòu)的指針由系統(tǒng)命名,用戶在程序中可直接使用。 C語言中提供了三個(gè)標(biāo)準(zhǔn)設(shè)備文件的指針: stdin 標(biāo)準(zhǔn)輸入文件(鍵盤) stdout 標(biāo)準(zhǔn)

14、輸出文件(顯示器) stderr 標(biāo)準(zhǔn)錯(cuò)誤輸出文件(顯示器),a,28,第十一章 文件,文件概述 文件處理 文件順序讀寫 文件隨機(jī)操作 文件檢測(cè) 文件實(shí)例,a,29,11.3 文件順序讀寫,文件順序操作 對(duì)文件的操作(文件讀寫)必須按文件中字符的先后順序進(jìn)行,只能在操作了第i個(gè)字符之后,才能操作第i+1個(gè)字符。 在對(duì)文件操作時(shí),文件的位置指針由系統(tǒng)自動(dòng)向前(文件尾方向)移動(dòng)。,a,30,11.3 文件順序讀寫,進(jìn)行順序操作的函數(shù): 字符輸入輸出函數(shù) fgetc fputc 字符串輸入輸出函數(shù) fgets fputs 格式化輸入輸出函數(shù) fscanf fprintf 數(shù)據(jù)塊輸入輸出函數(shù) frea

15、d fwrite,a,31,鍵盤文件,內(nèi)存,顯示器文件,磁盤文件,磁盤文件,scanf getchar gets.,printf putchar puts.,fscanf fgetc fgets fread.,fprintf fputc fputs fwrite.,a,32,字符輸入輸出( fgetc / fputc ) 輸入函數(shù): ch = fgetc(fp); fp為已經(jīng)打開的文件的指針 函數(shù)功能: 從指定的文件中讀取一個(gè)字符。即:從fp所指向的文件(該文件必須是以讀或讀寫方式打開的)中讀取一個(gè)字符返回,讀取的字符賦給變量ch。 若讀取字符時(shí)文件已經(jīng)結(jié)束或出錯(cuò): 對(duì)于ASCII文件,文件結(jié)

16、束時(shí),返回文件結(jié)束標(biāo)記EOF(-1); 對(duì)于二進(jìn)制文件,要使用feof函數(shù)來判斷文件是否結(jié)束。,a,33,11.3 文件順序讀寫,輸出函數(shù): fputc( ch, fp );ch為需要輸出的字符 函數(shù)功能: 將一個(gè)字符輸出到指定文件中。即將字符變量ch中的字符輸出到fp所指向的文件。 若輸出操作成功,該函數(shù)返回輸出的字符;否則,返回EOF。,a,34,例:顯示一個(gè)文本文件的內(nèi)容 #include int main ( ) FILE * fp; char filename20, ch; printf (Enter filename:); scanf(%s,filename); /* 輸入文件名

17、*/ if (fp=fopen(filename, r)=NULL) /* 打開 */ printf(“file open error.n”); /* 出錯(cuò)處理 */ exit (0); while ( ( ch = fgetc(fp) )!=EOF) /* 讀字符 */ putchar(ch); fclose (fp); /* 關(guān)閉文件 */ ,a,35,例:使用標(biāo)準(zhǔn)輸出文件顯示文本文件內(nèi)容 #include int main ( ) FILE * fp; char filename20, ch; printf (Enter filename:); scanf(%s,filename); /

18、* 輸入文件名 */ if (fp=fopen(filename, r)=NULL) /* 打開 */ printf(“file open error.n”); /* 出錯(cuò)處理 */ exit (0); while ( ( ch = fgetc(fp) )!=EOF) /* 讀字符 */ fputc(ch,stdout); /*向標(biāo)準(zhǔn)輸出文件輸出(顯示)*/ fclose (fp); /* 關(guān)閉文件 */ ,a,36,例:復(fù)制文本文件 int main ( ) FILE * fp1, * fp2; char file120, file220, ch; printf (Enter filenam

19、e1:); scanf(%s,file1); printf (Enter filename2:); scanf(%s,file2); if ( (fp1=fopen(file1, “r”)=NULL ) /* 打開文件1 */ printf(file1 open error.n); exit (0); if ( (fp2=fopen(file2, “w”)=NULL ) /* 打開文件2 */ printf(file2 open error.n); exit (0); while (ch=fgetc(fp1)!=EOF ) /*從文件fp1中讀字符*/ fputc (ch, fp2); /*

20、寫入文件fp2中 */ fclose (fp1); fclose (fp2); ,a,37,putchar (ch); fputc (ch, stdout); fputc (ch, fp2);,a,38,11.3 文件順序讀寫,字符串輸入輸出( fgets / fputs ) 輸入函數(shù): fgets ( s, n, fp ); char s ; int n; FILE * fp; 函數(shù)功能:從 fp 所指向的文件中讀取長(zhǎng)度不超過 n-1 個(gè)字符的字符串,并將該字符串放到字符數(shù)組 s 中。函數(shù)的返回值為字符數(shù)組 s 的首地址;如果文件結(jié)束或出錯(cuò),則返回 NULL。,a,39,11.3 文件順序讀

21、寫,情況1:已讀入 n-1 個(gè)字符 則:s 中存入 n-1 個(gè)字符,串尾為 0 情況2:讀入字符遇到 n 則:s 中存入實(shí)際讀入的字符,串尾為 n0 情況3:讀入字符遇到文件尾 則:s 中存入實(shí)際讀入的字符,EOF 不存入數(shù)組,串尾為 0 情況4:當(dāng)文件已經(jīng)結(jié)束時(shí),繼續(xù)讀文件 則函數(shù)返回NULL,表示文件結(jié)束,a,40,打開文本文件:fp, fgets ( s, 4, fp);,文件的讀寫位置指針,順序讀入3個(gè)字符,存入數(shù)組,加上0, fgets ( s, 4, fp);,順序讀入n ,存入數(shù)組,退出,加上0,讀入字符:,c 文件指針自動(dòng)向后移動(dòng),n 文件指針自動(dòng)向后移動(dòng), fgets ( s

22、, 4, fp);,順序讀入遇到EOF,不存退出,加上0,f 文件指針自動(dòng)向后移動(dòng), fgets ( s, 4, fp);,讀入EOF,不存,函數(shù)返回NULL,EOF,a,41,int main ( ) FILE * fp; char file20, s4; printf (Enter filename:); scanf(%s,file); if ( (fp=fopen(file, r) = NULL ) printf(file open error.n); exit (0); while ( fgets( s,4,fp )!=NULL ) printf (%s, s); fclose (fp

23、); ,abcdn f,abcdn f,輸入文件:,輸出:,fgets語句執(zhí)行四次,循環(huán)執(zhí)行三次,用長(zhǎng)度為 4 的數(shù)組實(shí)現(xiàn)對(duì)文件內(nèi)容的原樣輸出,a,42,11.3 文件順序讀寫,輸出函數(shù): fputs ( s, fp );char s ; FILE * fp; 函數(shù)功能: 將s指向的字符串或字符串常量寫入文件 fp。輸出的字符串寫入文件時(shí),字符串結(jié)束標(biāo)記“0”被自動(dòng)舍去。 函數(shù)調(diào)用成功,則返回值為 0;否則,返回文件結(jié)束標(biāo)記 EOF。,a,43,int main ( ) FILE * fp1, * fp2; char file120, file220, s10; printf (Enter f

24、ilename1:); scanf(%s,file1); printf (Enter filename2:); scanf(%s,file2); if ( (fp1=fopen(file1,r) = NULL ) /*打開文件1*/ printf(file1 open error.n); exit (0); if ( (fp2=fopen(file2,w) = NULL ) /*打開文件2*/ printf(file2 open error.n); exit (0); while ( fgets(s,10,fp1) != NULL ) /*從fp1讀出字符*/ fputs ( s, fp2 )

25、; /* 將字符串寫入文件fp2中 */ fclose (fp1); fclose (fp2); ,例:復(fù)制文本文件,a,44,格式化輸入輸出( fscanf / fprintf ) 輸入函數(shù): fscanf (fp, 格式控制符, 變量地址表); 功能:從ASCII文件fp中讀取字符,按格式控制符的含義存入對(duì)應(yīng)的變量中,返回值為輸入的數(shù)據(jù)個(gè)數(shù)。fscanf與scanf類似,格式控制符相同。 輸出函數(shù): fprintf( fp, 格式控制符, 表達(dá)式列表 ); 功能:將表達(dá)式列表中的數(shù)據(jù)按照格式控制符的說明,存入ASCII文件fp中,返回值為實(shí)際存入的數(shù)據(jù)個(gè)數(shù)。fprintf與printf類似

26、,格式控制符相同。,a,45,int main ( ) FILE * fp1; int a; char file20, s10; printf (Enter filename:); scanf(%s,file); if ( (fp=fopen(file, r) = NULL ) printf(file open error.n); exit (0); fscanf (fp, %s%d, s, ,printf(%s %dn,s,a);,注意此間發(fā)生的二進(jìn)制和ASCII碼的轉(zhuǎn)換,a,46,數(shù)據(jù)塊輸入輸出( fread / fwrite ) 輸入函數(shù): fread (buffer, size, co

27、unt, fp); char * buffer; unsigned size; int count; FILE * fp; 函數(shù)功能:從二進(jìn)制文件fp中讀取count個(gè)數(shù)據(jù)塊存入buffer中,每個(gè)數(shù)據(jù)塊的大小為size個(gè)字節(jié)。操作成功,函數(shù)的返回值為實(shí)際讀入的數(shù)據(jù)塊的數(shù)量;若文件結(jié)束或出錯(cuò),返回值為0。,a,47,11.3 文件順序讀寫,輸出函數(shù): fwrite(buffer, size, count, fp); char * buffer; unsigned size; int count; FILE * fp; 函數(shù)功能:將buffer中的count個(gè)數(shù)據(jù)塊寫入二進(jìn)制文件fp中,每個(gè)數(shù)據(jù)

28、塊的大小為size個(gè)字節(jié)。操作成功,函數(shù)的返回值為實(shí)際寫入文件的數(shù)據(jù)塊的數(shù)量;若文件結(jié)束或出錯(cuò),返回值為0。,a,48,從鍵盤輸入3個(gè)學(xué)生的數(shù)據(jù),將它們存入文件student;然后再從文件中讀出數(shù)據(jù),顯示在屏幕上。 #define SIZE 3 struct student /* 定義結(jié)構(gòu) */ long num; char name10; int age; char address10; stuSIZE, out; void fsave ( ) FILE * fp; int i; if (fp=fopen(“student”,“wb”)=NULL) /*二進(jìn)制寫*/ printf (Cann

29、ot open file.n); exit(1); for ( i=0; iSIZE; i+ ) /* 以數(shù)據(jù)塊形式寫入文件 */ if (fwrite( /* 關(guān)閉文件 */ ,寫入一個(gè)整型:int a=15; fwrite(,a,49,主函數(shù) int main ( ) FILE * fp; int i; for ( i=0; iSIZE; i+ ) /*從鍵盤讀入學(xué)生的信息*/ printf(Input student %d:, i+1); scanf (%ld%s%d%s, /* 關(guān)閉文件 */ ,鍵盤結(jié)構(gòu)數(shù)組文件 文件結(jié)構(gòu)變量顯示器,a,50,第十一章 文件,文件概述 文件處理 文件順

30、序讀寫 文件隨機(jī)操作 文件檢測(cè) 文件實(shí)例,a,51,11.4 文件隨機(jī)操作,文件讀寫操作的內(nèi)部機(jī)制 文件的讀寫是通過文件系統(tǒng)內(nèi)部的“位置指針(讀寫位置指針)”進(jìn)行的。 當(dāng)打開一個(gè)文件時(shí),系統(tǒng)自動(dòng)為這個(gè)打開的文件建立一個(gè)位置指針,對(duì)該文件的讀寫操作均通過位置指針進(jìn)行操作。 fopen后位置指針指向文件中第0個(gè)字節(jié)(位置指針指向已經(jīng)讀入的最后一個(gè)字節(jié))。 文件結(jié)束時(shí),位置指針指向文件最后1個(gè)字符的位置(調(diào)用feof函數(shù)為非0,表示文件已經(jīng)結(jié)束)。,a,52,順序讀寫操作 在順序讀寫文件時(shí),文件的位置指針由系統(tǒng)自動(dòng)控制,每次讀寫操作,系統(tǒng)都會(huì)先將位置指針移到文件的下一個(gè)字節(jié),然后再進(jìn)行讀寫操作。 在

31、不改變文件的讀寫位置指針的情況下,只能對(duì)文件進(jìn)行順序操作。 隨機(jī)讀寫操作 通過改變文件的位置指針,可在文件的任意位置進(jìn)行讀寫操作。 與文件位置指針有關(guān)的函數(shù): fseek移動(dòng)文件的位置指針 rewind文件的位置指針回到文件頭位置 ftell取文件的位置指針,a,53,位置指針移動(dòng)(fseek) fseek(fp, offset, position);FILE * fp; long offset; int position; 函數(shù)功能: 將指定文件 fp 的文件讀寫位置指針按照position規(guī)定的方式移動(dòng)offset 個(gè)字節(jié)。移動(dòng)成功返回當(dāng)前位置;否則,返回-1。 position為起始點(diǎn),

32、指出以文件的什么位置為基準(zhǔn)進(jìn)行移動(dòng): 0 文件的開頭; 1 文件的當(dāng)前位置; 2 文件的末尾。,a,54,11.4 文件隨機(jī)操作,實(shí)例: 執(zhí)行 fopen 成功后: 文件讀寫位置指針為文件的第 0 個(gè)字節(jié) fseek ( fp, 50, 0 ); 從文件頭開始向前(文件尾方向)移動(dòng) 50 個(gè)字節(jié) 如果繼續(xù)進(jìn)行 fgetc,將讀入第 51 個(gè)字符 fseek ( fp, -10, 1 ); 從當(dāng)前位置向后(文件頭方向)移動(dòng) 10 個(gè)字節(jié) fseek ( fp, 0, 0 ); 文件指針回到文件頭,文件指針值回到 0,0 文件的開頭; 1 文件的當(dāng)前位置; 2 文件的末尾。,a,55,11.4 文

33、件隨機(jī)操作,實(shí)例: fseek ( fp, 0, 2 ) 將文件位置指針移動(dòng)到文件最后一個(gè)字符的后面,可以簡(jiǎn)單認(rèn)為是指向了文件結(jié)束標(biāo)記EOF fseek ( fp, -1, 2 ) 文件指針指向最后一個(gè)字符 fseek ( fp, -2, 2 ) 文件倒數(shù)第2個(gè)字符(文件最后一個(gè)字符之前) fseek ( fp, -20, 2 ) 從文件尾開始向后(文件頭方向)移動(dòng) 20 個(gè)字節(jié),0 文件的開頭; 1 文件的當(dāng)前位置; 2 文件的末尾。,a,56,11.4 文件隨機(jī)操作,位置指針返回到文件頭(rewind) rewind ( fp ); 函數(shù)功能: 使指定文件 fp 的讀寫位置指針重新定位到文

34、件的頭位置。即:使文件位置指針回到0。 等價(jià)于: fseek ( fp, 0, 0 ),a,57,11.4 文件隨機(jī)操作,取位置指針(ftell) ftell ( fp ); 函數(shù)功能: 取 fp 所指向文件的當(dāng)前讀寫位置,即文件讀寫位置指針的當(dāng)前值。 該值是一個(gè)長(zhǎng)整型數(shù),是位置指針從文件開始處到當(dāng)前位置的位移量的字節(jié)數(shù)。 如果函數(shù)的返回值為 -1L,表示出錯(cuò)。,a,58,第十一章 文件,文件概述 文件處理 文件順序讀寫 文件隨機(jī)操作 文件檢測(cè) 文件實(shí)例,a,59,11.5 文件檢測(cè),檢測(cè)文件操作后的狀態(tài) 一般情況下應(yīng)該檢驗(yàn)的文件狀態(tài)有: 文件是否結(jié)束? 文件操作是否出錯(cuò)? C語言提供了兩種手

35、段來反映函數(shù)調(diào)用的情況和文件的狀態(tài): 使用函數(shù)的返回值可以知道各種文件調(diào)用(操作)是否成功; 使用檢測(cè)函數(shù)可以判斷文件的操作狀態(tài)和出錯(cuò)狀態(tài)。,a,60,檢測(cè)文件結(jié)束函數(shù) feof ( fp ) 功能:若文件已經(jīng)結(jié)束,返回值為非0;若文件尚未結(jié)束,返回值為0。 檢測(cè)文件出錯(cuò)函數(shù) ferror ( fp ) 功能:若文件出錯(cuò),返回值為非0;若文件未出錯(cuò),返回值為0。 清除出錯(cuò)標(biāo)記及文件結(jié)束標(biāo)記 clearerr ( fp ) 功能:清除文件 fp 的出錯(cuò)和文件結(jié)束標(biāo)記。,a,61,a,62,a,63,第十一章 文件,文件概述 文件處理 文件順序讀寫 文件隨機(jī)操作 文件檢測(cè) 文件實(shí)例,a,64,11.6 文件實(shí)例,從計(jì)算機(jī)的內(nèi)存中將數(shù)據(jù)寫入文件,稱為 。 A. 輸入 B. 輸出 C. 修改 D. 刪除 C語言可以處理的文件類型是 。 A.文本文件和數(shù)據(jù)文件 B.文本文件和二進(jìn)制文件

溫馨提示

  • 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. 人人文庫網(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)論