C語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程課件-模塊8_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程課件-模塊8_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程課件-模塊8_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程課件-模塊8_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程課件-模塊8_第5頁(yè)
已閱讀5頁(yè),還剩10頁(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)介

模塊八圖書(shū)數(shù)據(jù)的存儲(chǔ)模塊學(xué)習(xí)目標(biāo)1.理解和掌握文件的打開(kāi)、關(guān)閉;2.掌握文件的讀寫(xiě)操作。文件文件的打開(kāi)和關(guān)閉文件的順序讀寫(xiě)文件的定位及隨機(jī)讀寫(xiě)圖書(shū)數(shù)據(jù)的存儲(chǔ)文件

文件指存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合。操作系統(tǒng)是以文件為單位對(duì)數(shù)據(jù)進(jìn)行管理的。如果想找存在外部介質(zhì)上的數(shù)據(jù),必須先按文件名找到所指文件,然后再?gòu)奈募凶x取數(shù)據(jù)。要向外部介質(zhì)上存儲(chǔ)數(shù)據(jù)也必須先建立一個(gè)文件,才能向它輸出數(shù)據(jù)。文件的分類(lèi):(1)根據(jù)文件的內(nèi)容,可分為程序文件和數(shù)據(jù)文件,程序文件又可分為源文件、目標(biāo)文件和可執(zhí)行文件。(2)根據(jù)文件的組織形式,可分為順序存取文件和隨機(jī)存取文件。(3)根據(jù)文件的存儲(chǔ)形式,可分為ASCII碼文件和二進(jìn)制文件。文件的打開(kāi)和關(guān)閉C語(yǔ)言的文件管理系統(tǒng)為每個(gè)文件在內(nèi)存中開(kāi)辟一個(gè)存儲(chǔ)空間,用來(lái)存放諸如文件的名字、文件的狀態(tài)及文件當(dāng)前位置等有關(guān)信息。這些信息被保存在一個(gè)由系統(tǒng)定義的、取名為FILE的結(jié)構(gòu)體類(lèi)型的變量中。FILE定義形式如下:typedefstructshortlevel;/*緩沖區(qū)“滿”或“空”的程度*/{unsignedflags;/*文件狀態(tài)標(biāo)志*/charfd;/*文件描述符*/unsignedcharhold;/*如無(wú)緩沖區(qū)不讀取字符*/shortbsize;/*緩沖區(qū)的大小*/unsignedchar*buffer;/*數(shù)據(jù)緩沖區(qū)的位置*/unsignedar*curp;/*指針當(dāng)前的指向*/unsignedistemp;/*臨時(shí)文件,指示器*/shorttoken;/*用于有效檢查*/}FILE定義方式:

(1)FILEfi[3];

(2)FILE*fp;打開(kāi)文件的一般格式為:FILE*fp;fp=fopen("文件名","文件使用方式");“文件使用方式”參數(shù)定義:文件的打開(kāi)和關(guān)閉文件使用方式含義r(只讀)為輸入打開(kāi)一個(gè)文本文件w(只寫(xiě))為輸出打開(kāi)或建立一個(gè)文本文件a(追加)向一個(gè)文本文件尾部追加數(shù)據(jù)rb(只讀)為輸入打開(kāi)一個(gè)二進(jìn)制文件wb(只寫(xiě))為輸出打開(kāi)或建立一個(gè)二進(jìn)制文件ab(追加)向一個(gè)二進(jìn)制文件尾部追加數(shù)據(jù)r+(讀寫(xiě))為讀/寫(xiě)打開(kāi)一個(gè)文本文件w+(讀寫(xiě))為讀/寫(xiě)建立一個(gè)新的文本文件a+(讀寫(xiě))為讀/寫(xiě)打開(kāi)或建立一個(gè)新的文本文件rb+(讀寫(xiě))為讀/寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件wb+(讀寫(xiě))為讀/寫(xiě)建立一個(gè)新的二進(jìn)制文件ab+(讀寫(xiě))為讀/寫(xiě)打開(kāi)或建立一個(gè)二進(jìn)制文件關(guān)閉文件的一般格式為:fclose(文件指針);文件的順序讀寫(xiě)fputs函數(shù)fputs(str,fp);說(shuō)明:(1)str為字符數(shù)組或字符型指針,fp為FILE類(lèi)型的文件指針變量。(2)fputs函數(shù)把某一個(gè)字符串輸出到指定的文件中。(3)fputs函數(shù)帶有返回值,若輸出成功,則返回值為0,否則為非零值。fgets函數(shù)fgets(str,m,fp);說(shuō)明:(1)str為字符數(shù)組或字符型指針。(2)fp為FILE類(lèi)型的文件指針變量。(3)m為正整數(shù),表示從文件中讀取不超過(guò)m-1個(gè)字符,在讀取的最后一個(gè)字符后加上字符串結(jié)束標(biāo)志'\0'。如果在完成讀取m-1個(gè)字符之前,遇到換行符或EOF,則讀入過(guò)程立即結(jié)束,fgets的返回值為str的首地址;若只讀到文件尾或出錯(cuò),則返回空指針NULL。文件的順序讀寫(xiě)實(shí)例8-3-1:從鍵盤(pán)上輸入3行字符,并存入指定的文件file.doc中。01#include<stdlib.h>02intmain()03{04 inti;05 charstr[81];06 FILE*fp;07 if((fp=fopen("file.doc","w"))==NULL)/*創(chuàng)建doc文件且判斷能否正常打開(kāi)*/08 {09 printf("Thefilecannotbeopened");10 exit(0);11 }12 for(i=1;i<4;i++)/*循環(huán)3次,寫(xiě)入3行字符串*//*接收字符串保存在數(shù)組中*/13 {14 gets(str);15 fputs(str,fp);/*把字符串寫(xiě)到文件上*/16 fputs("\n",fp);17 }18 fclose(fp);/*關(guān)閉文件*/19 return0;20}文件的順序讀寫(xiě)實(shí)例8-3-2:續(xù)實(shí)例8-3-1,文件file.doc已經(jīng)存在并存有3行字符,現(xiàn)要從文件file.doc中讀取字符,并顯示在屏幕上。01#include<stdlib.h>02intmain()03{04 charstr[30];05 FILE*fp;/*創(chuàng)建doc文件且判斷能否正常打開(kāi)*/06 if((fp=fopen("file.doc","r"))==NULL)07 {08 printf("Thefilecannotbeopened\n");09 exit(0);10 }11 while(fgets(str,30,fp)!=NULL)/*讀取字符串*/12 printf("%s",str);/*輸出已讀取的字符串*/13 fclose(fp);/*關(guān)閉文件*/14 return0;15}文件的順序讀寫(xiě)1.fwrite函數(shù)fwrite(buffer,size,count,fp);說(shuō)明:(1)buffer用于存放輸出數(shù)據(jù)的緩沖區(qū)指針,指向輸出數(shù)據(jù)的起始地址。(2)size是輸出的每個(gè)數(shù)據(jù)項(xiàng)的字節(jié)數(shù)。(3)count是指要輸出多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng)。(4)fp是FILE類(lèi)型的文件指針變量。2.fread函數(shù)fread(buffer,size,count,fp);說(shuō)明:(1)buffer用于存放讀入數(shù)據(jù)的緩沖區(qū)指針,指向讀入數(shù)據(jù)的起始地址。(2)size是讀入的每個(gè)數(shù)據(jù)項(xiàng)的字節(jié)數(shù)。(3)count是指要讀入多少個(gè)size字節(jié)長(zhǎng)的字段。(4)fp是FILE類(lèi)型的文件指針變量。文件的順序讀寫(xiě)實(shí)例8-3-3:從鍵盤(pán)輸入8個(gè)整數(shù)并存入文件file.dat中,然后再?gòu)脑撐募凶x取后6個(gè)整數(shù)且逆序輸出。01#include"stdio.h"02intmain()03{04 FILE*fp;05 intd[8],i;06 for(i=0;i<8;i++)07 scanf("%d",&d[i]);08 if((fp=fopen("file.dat","w+"))==NULL)09 printf("Thefilecannotbeopened.");10 else11 {12 fwrite(d,4,8,fp);13 fclose(fp);14 }15 if((fp=fopen("file.dat","w+"))==NULL)16 printf("Thefilecannotbeopened.");17 else18 {19 fread(d,4,8,fp);20 for(i=7;i>=2;i--)21 printf("%-3d",d[i]);22 }23 return0;24}文件的順序讀寫(xiě)1.fprintf函數(shù)fprintf(文件類(lèi)型指針,格式控制,輸出列表);功能:將“輸出列表”變量中的數(shù)據(jù)輸出到“文件類(lèi)型指針”所標(biāo)識(shí)的文件中。2.fscanf函數(shù)fscanf(文件類(lèi)型指針,格式控制,地址列表);功能:從“文件類(lèi)型指針”所標(biāo)識(shí)的文件讀入一個(gè)字符流,存入“地址列表”對(duì)應(yīng)的變量中。文件的定位及隨機(jī)讀寫(xiě)為了對(duì)讀寫(xiě)進(jìn)行控制,系統(tǒng)為每個(gè)文件設(shè)置了一個(gè)文件讀寫(xiě)位置標(biāo)記,用來(lái)指示接下來(lái)要讀寫(xiě)的字符的位置。一般情況下,在對(duì)字符文件進(jìn)行順序讀寫(xiě)時(shí),文件位置標(biāo)記指向文件開(kāi)頭,這時(shí)如果對(duì)文件進(jìn)行讀寫(xiě)操作,讀寫(xiě)完第1個(gè)字符后,文件位置標(biāo)記順序向后移一個(gè)位置,在下一次執(zhí)行讀寫(xiě)操作時(shí),就將位置標(biāo)記指向的第2個(gè)字符進(jìn)行讀出或?qū)懭搿R来祟?lèi)推,直到文件末尾,此時(shí)文件位置標(biāo)記在最后一個(gè)數(shù)據(jù)之后。rewind(文件指針);說(shuō)明:rewind函數(shù)的作用是使文件讀寫(xiě)位置標(biāo)記重新返回到文件的開(kāi)頭,此函數(shù)沒(méi)有返回值。(2)fseek(文件類(lèi)型指針,位移量,起始點(diǎn));說(shuō)明:“起始點(diǎn)”用0,1或2代替,0代表文件開(kāi)始位置,1為當(dāng)前位置,2為文件末尾位置?!拔灰屏俊敝敢浴捌鹗键c(diǎn)”為基點(diǎn),向前移動(dòng)的字節(jié)數(shù)(長(zhǎng)整型)。(3)用ftell函數(shù)測(cè)定讀寫(xiě)文件位置標(biāo)記的當(dāng)前位置。ftell函數(shù)的作用是得到流式文件中文件位置標(biāo)記的當(dāng)前位置,用相對(duì)于文件開(kāi)頭的位移量來(lái)表示。如果調(diào)用函數(shù)時(shí)出錯(cuò)(如不存在fp指向的文件),則ftell函數(shù)返回值為-1L。實(shí)例8-4-1:在磁盤(pán)文件上存有10個(gè)學(xué)生的數(shù)據(jù)。要求將第1、3、5、7、9個(gè)學(xué)生的數(shù)據(jù)輸入計(jì)算機(jī),并在屏幕上顯示出來(lái)。文件的定位及隨機(jī)讀寫(xiě)01#include<stdio.h>02structStudent_type/*學(xué)生數(shù)據(jù)類(lèi)型*/03{04 charname[10];05 intnum;06 intage;07 charaddr[15];08}stud[10];09intmain()10 {11 inti;12 FILE*fp;13 if((fp=fopen("stu.dat","rb"))==NULL)14 {15 printf("cannotopenfile\n");16 exit(0);17 }18for(i=0;i<10;i+=2)19{20 fseek(fp,i*sizeof(structStudent_type),0);21 fread(&stud[i],sizeof(structStudent_type),1,fp);22 printf("%-10s%4d%4d%-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);/*輸出至屏幕*/23}24fclose(fp);25return0;26}利用fseek函數(shù)可以實(shí)現(xiàn)文件的隨機(jī)讀寫(xiě)。fseek函數(shù)可以按位移量來(lái)移動(dòng)文件的位置標(biāo)記,

溫馨提示

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