第17章 文件.ppt_第1頁
第17章 文件.ppt_第2頁
第17章 文件.ppt_第3頁
第17章 文件.ppt_第4頁
第17章 文件.ppt_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第17章 文件,文件也是一種數(shù)據(jù)類型,是存儲在外部存儲設(shè)備上的數(shù)據(jù)集合,可用于保存大量的數(shù)據(jù)。對文件的處理,主要分為打開與關(guān)閉文件、從文件中讀取數(shù)據(jù)和向文件中寫入數(shù)據(jù)、文件的定位、文件的檢測。對文件的這些處理都是利用系統(tǒng)函數(shù)和指向文件類型的指針變量進(jìn)行的。本章的主要內(nèi)容校 C文件概述; 文件類型指針; 文件的打開與關(guān)閉; 文件的讀寫操作; 文件的定位; 文件的檢測。,17.1 文件概述,文件是按照某個規(guī)則集合在一起保存在外部存儲器上的一批數(shù)據(jù)。組成文件的數(shù)據(jù)類型可以是各種類型的數(shù)據(jù),如整型、字符型、字符串等,也可以是程序清單等。 文件可以用于永久地保存大量的數(shù)據(jù),存儲在磁盤上的數(shù)據(jù)在計算機關(guān)閉

2、以后仍然存在,下一次使用的時候可以從磁盤上讀取文件中的數(shù)據(jù)繼續(xù)處理。,17.1.1 文件名,文件名是文件的標(biāo)識符,每一個文件都以一個唯一的文件名進(jìn)行存儲。文件名是由一組字符構(gòu)成的,目錄分隔符和空操作符不能出現(xiàn)在文件名中。 在對文件進(jìn)行處理的時候必須給出文件名。文件名的一般組成如下: 盤符:路徑文件名.擴展名 例如: D:webteacherPopCalendar2005Cprograme.txt.,17.1.2 文件的類型,按文件中數(shù)據(jù)組織形式,可以把文件分為文本文件和二進(jìn)制文件。 在文本文件中,存放的數(shù)據(jù)都是將其轉(zhuǎn)換成對應(yīng)的ASCII代碼字符來存放的,該文件由一個個字符組成,每一個字節(jié)存放一

3、個ASCII碼值,代表一個字符。例如,一個整型數(shù)據(jù)-15621在文本文件中按字符存放,分別存放字符-、1、5、6、2、1,共占6個字節(jié);一個單精度類型數(shù)據(jù)3.14159,分別存放的是字符3、.、1、4、1、5、9,共占7個字節(jié)。 二進(jìn)制文件中的數(shù)據(jù)都是按其二進(jìn)制方式存放的,每個數(shù)據(jù)占用的字節(jié)數(shù)取決于該數(shù)據(jù)的數(shù)據(jù)類型。例如,一個整型數(shù)據(jù)-15621在二進(jìn)制文件中占4個字節(jié),單精度類型數(shù)據(jù)3.14159在二進(jìn)制文件中占4個字節(jié)。,17.2 文件類型指針,文件型是一種特殊的結(jié)構(gòu)體,該結(jié)構(gòu)體用來存放文件的有關(guān)信息(如文件的名字、文件的狀態(tài)及文件當(dāng)前的位置等)。該結(jié)構(gòu)體類型是由系統(tǒng)定義的,取名為“FIL

4、E”。對FILE這個結(jié)構(gòu)體類型的定義是在stdio.h頭文件中。 文件指針的定義如下: FILE *文件指針變量名; 如:FILE *fp; #include 或#include “stdio.h”,17.3 文件的打開與關(guān)閉,在C語言之中,對文件讀寫之前必須先打開文件,在使用以后要關(guān)閉該文件。文件的打開與關(guān)閉都是利用系統(tǒng)函數(shù)來實現(xiàn)的,通過調(diào)用文件打開函數(shù)fopen()和文件關(guān)閉函數(shù)fclose(),完成文件的打開與關(guān)閉。,17.3.1 文件打開函數(shù)fopen,文件打開函數(shù)fopen的調(diào)用格式為: FILE *fp; fp=fopen(filename,mode); 文件打開函數(shù)fopen如果

5、打開成功,就返回一個文件類型的指針,并將賦值給文件指針變量fp,如果失敗,則返回NULL。 文件打開函數(shù)fopen有兩個參數(shù),filename指定打開的文件名,mode指定文件打開的方式。,(1)文本文件的打開方式有以下幾種: r:打開一個已經(jīng)存在的文本文件,只能從文本文件中讀取數(shù)據(jù)。如果指定文件不存在,程序就會出錯。 w:打開一個文件文件,只能將數(shù)據(jù)寫入文件。如果已經(jīng)存在該文件名的文件,文件被重寫;如果不存在,則以該文件名建立新的文件。 a:以附加方式找開文件,將數(shù)據(jù)寫入文件的尾部。如果文件不存在,創(chuàng)建新的文件用于寫入。 r+:打開一個已經(jīng)存在的文本文件,可以從中讀取數(shù)據(jù),也可以寫入數(shù)據(jù)。

6、w+:打開一個已經(jīng)存在的文本文件,可以讀取數(shù)據(jù),也可以寫入數(shù)據(jù),若文件不存在,則自動建立一個新文件,接受寫入的數(shù)據(jù);若文件存在,則刪去舊文件,建立一個同名新文件,接受寫入的數(shù)據(jù)。 a+:打開一個已經(jīng)存在的文本文件,可以讀取數(shù)據(jù),也可以從當(dāng)前文件的尾部追加寫入數(shù)據(jù)。當(dāng)文件不存在時,創(chuàng)建新的文件用于文件尾寫入。,(2)二進(jìn)制文件的打開方式有以下幾點: rb:打開一個已經(jīng)存在的二進(jìn)制文件,只能從二進(jìn)制文件中讀取數(shù)據(jù)。如果指定文件不存在,程序就會出錯。 wb:打開一個二制制文件,只能將數(shù)據(jù)寫入文件。如果已經(jīng)存在該文件名的文件,文件被重寫;如果不存在,則以該文件名建立新的文件。 ab:打開一個已經(jīng)存在的

7、二進(jìn)制文件,只能從當(dāng)前文件的尾部追加寫入數(shù)據(jù)。如果文件不存在,創(chuàng)建新的文件用于寫入。 rb+:打開一個已經(jīng)存在的二進(jìn)制文件,可以從中讀取數(shù)據(jù),也可以寫入數(shù)據(jù)。 wb+:打開一個已經(jīng)存在的二進(jìn)制文件,可以讀取數(shù)據(jù),也可以寫入數(shù)據(jù),若文件不存在,則自動建立一個新文件,接受寫入的數(shù)據(jù);若文件存在,則刪去舊文件,建立一個同名新文件,接受寫入的數(shù)據(jù)。 “ab+”,打開一個已經(jīng)存在的文本文件,可以讀取數(shù)據(jù),也可以從當(dāng)前文件的尾部追加寫入數(shù)據(jù)。當(dāng)文件不存在時,創(chuàng)建新的文件用于文件尾寫入。,17.3.2 文件關(guān)閉函數(shù)fclose,使用完一個文件后應(yīng)該去關(guān)閉它,以免它再被誤用,造成數(shù)據(jù)丟失。所謂“關(guān)閉”就是使文

8、件指針變量不指向該文件,以后不能再通過該指針對其相連的文件進(jìn)行讀寫操作。如果需要進(jìn)行讀寫操作,要再次打開該文件。 文件關(guān)閉函數(shù)fclose的調(diào)用格式為: fclose(文件指針);,17.4 文件的讀寫操作,當(dāng)文件以合適的方式打開以后,就可以對其進(jìn)行讀寫操作。C語言提供了豐富的數(shù)據(jù)讀寫函數(shù),可以按字符讀寫,可以按行讀寫,也可以按指定長度的數(shù)據(jù)塊進(jìn)行讀寫,還可以進(jìn)行格式化讀寫。這些函數(shù)都包含在頭文件stdio.h中。,17.4.1 字符讀寫函數(shù),字符讀寫函數(shù)在處理文件中的數(shù)據(jù)時,是以字符為單位進(jìn)行讀寫的,即每次只讀寫一個字符。它常用來處理文本文件,但也可以處理二進(jìn)制文件。 1.讀取字符函數(shù)fge

9、tc 讀取字符函數(shù)fgetc的調(diào)用格式為: fgetc(文件指針); 2 .寫入字符函數(shù)fputc 向文件中寫入字符函數(shù)fputc的調(diào)用格式為: fputc(字符,文件指針變量);,17.4.2 字符串讀寫函數(shù),字符串讀寫函數(shù)是將文件中的數(shù)據(jù)以字符串為單位進(jìn)行處理的,即每次一個字符串。字符串讀寫函數(shù)所處理的文件是文本文件,但也可以是二進(jìn)制文件。 1讀取字符串函數(shù)fgets 從文件中讀取字符串函數(shù)fgets的功能是從指定的文件中讀一個字符串到字符數(shù)組中,函數(shù)調(diào)用的形式為: fgets(字符數(shù)組名,n,文件指針); 例如:fgets(str,n,fp) 2寫入字符串函數(shù)fputs 文件寫入字符串函

10、數(shù)fputs的功能是把一個字符串寫入到指定的文件中。其調(diào)用形式為: fputs(字符串,文件指針) 例如:fputs(“abcd”,fp);,使用文件字符串讀寫函數(shù)時,需要以下幾點: (1)這兩個函數(shù)主要用于處理文本文件,也可以用來處理二進(jìn)制文件,每次讀寫的是一個字符串。 (2)從文件中讀取字符串時,不是用字符串結(jié)束標(biāo)記符0來控制字符串結(jié)束,而是用組字符串的字符數(shù)目或者回車換行符n來控制字符串結(jié)束。 (3)當(dāng)正確地讀或?qū)懸粋€字符串后,文件的文件指針會自動后移一個字符串的位置。,17.4.3 數(shù)據(jù)塊讀寫函數(shù),1讀取數(shù)據(jù)塊的函數(shù)fread fread()函數(shù)用來從指定文件中讀一個數(shù)據(jù)塊,該函數(shù)的調(diào)

11、用格式為: fread(buffer,size,count,fp); 2寫入數(shù)據(jù)塊的函數(shù)fwrite fwrite函數(shù)用來將一個數(shù)據(jù)塊寫入文件,該函數(shù)的調(diào)用格式為: fwrite(buffer,size,count,fp);,17.4.4 格式數(shù)據(jù)讀寫函數(shù),1格式數(shù)據(jù)讀取函數(shù)fscanf 格式數(shù)據(jù)讀取函數(shù)fscanf類似與scanf函數(shù),兩者都是格式化輸入函數(shù),不同的是scanf函數(shù)的作用對象是終端鍵盤,而fscanf函數(shù)的作用對象是文件。fscanf函數(shù)調(diào)用的一般格式為: fscanf(文件指針,格式控制,輸入列表) 2格式數(shù)據(jù)寫入函數(shù)fprintf 格式數(shù)據(jù)寫入函數(shù)fprintf類似于格式

12、輸出函數(shù)printf,兩者都是格式化輸出函數(shù),只不過兩者的作用對象不同,fprintf函數(shù)輸出到文件,printf函數(shù)輸出到終端。fprintf函數(shù)調(diào)用的一般格式為: fprintf(文件指針,格式控制,輸入列表),17.5 文件的定位,C語言中,打開文件時會產(chǎn)生一個文件指針指向文件的頭,在讀取文件時,需要從文件頭開始,每次讀寫完一個數(shù)據(jù)后,該位置指針會自動指向一下個數(shù)據(jù)的位置。為了能夠從文件中直接讀取某個數(shù)據(jù),系統(tǒng)提供了能將文件內(nèi)部指向直接定位到某個字節(jié)上的函數(shù)。,17.5.1 文件頭定位函數(shù)rewind,文件頭定位函數(shù)rewind的作用是將文件位置指針返回到文件指針變量指向的文件的開頭。

13、函數(shù)rewind調(diào)用的一般格式為: rewind(文件指針),17.5.2 文件隨機定位函數(shù)fseek,文件頭定位函數(shù)rewind是將文件位置指向文件的開頭,要讀取某個數(shù)據(jù)需要從頭開始,不方便,C語言提供了文件隨機定位函數(shù)fseek能將文件位置指針按需要移動到任意位置,可以實現(xiàn)對文件的隨機讀取。 文件隨機定位函數(shù)fseek的一般調(diào)用格式為: fseek(文件指針,位移量,起始位置) fseek(fp,10L,0); fseek(fp,20L,1); fseek(fp,-30L,2);,17.5.3 測試當(dāng)前位置函數(shù)ftell,在對文件進(jìn)行讀寫時,特別是多次調(diào)用隨機定義函數(shù)fseek以后,文件位

14、置指針的值經(jīng)常發(fā)生變化,很難確定其當(dāng)前的位置。C語言定義的了測試當(dāng)前位置的函數(shù)ftell。 測試當(dāng)前位置函數(shù)ftell調(diào)用的一般格式為: ftell(文件指針),17.6 文件的檢測,C語言中,對文件的檢測主要是對文件末尾、讀寫出錯等方面講行的檢查和測試,C語言常用的文件檢測函數(shù)有文件末尾檢測函數(shù)feof()、文件讀寫出錯檢測函數(shù)ferror()等。,17.6.1 文件末尾檢測函數(shù)feof,在文本文件中,C語言規(guī)定EOF為文件結(jié)束標(biāo)志,EOF的值為-1,因為在ASCII碼表中沒有-1所對應(yīng)的字符。但在二進(jìn)制文件中,-1可能為用效數(shù)據(jù),就不能用EOF來作為文件結(jié)束標(biāo)志。 C語言專門定義了feof函數(shù)作為二進(jìn)制文件的結(jié)束標(biāo)志,也可以作為文本文件的結(jié)束標(biāo)志。 文件末尾檢測函數(shù)feof的一般調(diào)用格式為: feof(文件指針),17.6.2 文件讀寫出錯檢測函數(shù)ferror,在程序執(zhí)行過程中,特別是文件讀寫過程中,會出現(xiàn)一會不可預(yù)見的錯誤。C語言定義了文件讀寫出錯檢測函數(shù)ferror。 讀

溫馨提示

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

評論

0/150

提交評論