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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

4、E”。對(duì)FILE這個(gè)結(jié)構(gòu)體類型的定義是在stdio.h頭文件中。 文件指針的定義如下: FILE *文件指針變量名; 如:FILE *fp; #include 或#include “stdio.h”,17.3 文件的打開與關(guān)閉,在C語言之中,對(duì)文件讀寫之前必須先打開文件,在使用以后要關(guān)閉該文件。文件的打開與關(guān)閉都是利用系統(tǒng)函數(shù)來實(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、打開成功,就返回一個(gè)文件類型的指針,并將賦值給文件指針變量fp,如果失敗,則返回NULL。 文件打開函數(shù)fopen有兩個(gè)參數(shù),filename指定打開的文件名,mode指定文件打開的方式。,(1)文本文件的打開方式有以下幾種: r:打開一個(gè)已經(jīng)存在的文本文件,只能從文本文件中讀取數(shù)據(jù)。如果指定文件不存在,程序就會(huì)出錯(cuò)。 w:打開一個(gè)文件文件,只能將數(shù)據(jù)寫入文件。如果已經(jīng)存在該文件名的文件,文件被重寫;如果不存在,則以該文件名建立新的文件。 a:以附加方式找開文件,將數(shù)據(jù)寫入文件的尾部。如果文件不存在,創(chuàng)建新的文件用于寫入。 r+:打開一個(gè)已經(jīng)存在的文本文件,可以從中讀取數(shù)據(jù),也可以寫入數(shù)據(jù)。

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

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

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

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

11、用格式為: fread(buffer,size,count,fp); 2寫入數(shù)據(jù)塊的函數(shù)fwrite fwrite函數(shù)用來將一個(gè)數(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ù)的作用對(duì)象是終端鍵盤,而fscanf函數(shù)的作用對(duì)象是文件。fscanf函數(shù)調(diào)用的一般格式為: fscanf(文件指針,格式控制,輸入列表) 2格式數(shù)據(jù)寫入函數(shù)fprintf 格式數(shù)據(jù)寫入函數(shù)fprintf類似于格式

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

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

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

溫馨提示

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