C語言程序設(shè)計項目化教程課件-模塊8_第1頁
C語言程序設(shè)計項目化教程課件-模塊8_第2頁
C語言程序設(shè)計項目化教程課件-模塊8_第3頁
C語言程序設(shè)計項目化教程課件-模塊8_第4頁
C語言程序設(shè)計項目化教程課件-模塊8_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

(1)FILEfi[3];

(2)FILE*fp;打開文件的一般格式為:FILE*fp;fp=fopen("文件名","文件使用方式");“文件使用方式”參數(shù)定義:文件的打開和關(guān)閉文件使用方式含義r(只讀)為輸入打開一個文本文件w(只寫)為輸出打開或建立一個文本文件a(追加)向一個文本文件尾部追加數(shù)據(jù)rb(只讀)為輸入打開一個二進制文件wb(只寫)為輸出打開或建立一個二進制文件ab(追加)向一個二進制文件尾部追加數(shù)據(jù)r+(讀寫)為讀/寫打開一個文本文件w+(讀寫)為讀/寫建立一個新的文本文件a+(讀寫)為讀/寫打開或建立一個新的文本文件rb+(讀寫)為讀/寫打開一個二進制文件wb+(讀寫)為讀/寫建立一個新的二進制文件ab+(讀寫)為讀/寫打開或建立一個二進制文件關(guān)閉文件的一般格式為:fclose(文件指針);文件的順序讀寫fputs函數(shù)fputs(str,fp);說明:(1)str為字符數(shù)組或字符型指針,fp為FILE類型的文件指針變量。(2)fputs函數(shù)把某一個字符串輸出到指定的文件中。(3)fputs函數(shù)帶有返回值,若輸出成功,則返回值為0,否則為非零值。fgets函數(shù)fgets(str,m,fp);說明:(1)str為字符數(shù)組或字符型指針。(2)fp為FILE類型的文件指針變量。(3)m為正整數(shù),表示從文件中讀取不超過m-1個字符,在讀取的最后一個字符后加上字符串結(jié)束標志'\0'。如果在完成讀取m-1個字符之前,遇到換行符或EOF,則讀入過程立即結(jié)束,fgets的返回值為str的首地址;若只讀到文件尾或出錯,則返回空指針NULL。文件的順序讀寫實例8-3-1:從鍵盤上輸入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文件且判斷能否正常打開*/08 {09 printf("Thefilecannotbeopened");10 exit(0);11 }12 for(i=1;i<4;i++)/*循環(huán)3次,寫入3行字符串*//*接收字符串保存在數(shù)組中*/13 {14 gets(str);15 fputs(str,fp);/*把字符串寫到文件上*/16 fputs("\n",fp);17 }18 fclose(fp);/*關(guān)閉文件*/19 return0;20}文件的順序讀寫實例8-3-2:續(xù)實例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文件且判斷能否正常打開*/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}文件的順序讀寫1.fwrite函數(shù)fwrite(buffer,size,count,fp);說明:(1)buffer用于存放輸出數(shù)據(jù)的緩沖區(qū)指針,指向輸出數(shù)據(jù)的起始地址。(2)size是輸出的每個數(shù)據(jù)項的字節(jié)數(shù)。(3)count是指要輸出多少個size字節(jié)的數(shù)據(jù)項。(4)fp是FILE類型的文件指針變量。2.fread函數(shù)fread(buffer,size,count,fp);說明:(1)buffer用于存放讀入數(shù)據(jù)的緩沖區(qū)指針,指向讀入數(shù)據(jù)的起始地址。(2)size是讀入的每個數(shù)據(jù)項的字節(jié)數(shù)。(3)count是指要讀入多少個size字節(jié)長的字段。(4)fp是FILE類型的文件指針變量。文件的順序讀寫實例8-3-3:從鍵盤輸入8個整數(shù)并存入文件file.dat中,然后再從該文件中讀取后6個整數(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}文件的順序讀寫1.fprintf函數(shù)fprintf(文件類型指針,格式控制,輸出列表);功能:將“輸出列表”變量中的數(shù)據(jù)輸出到“文件類型指針”所標識的文件中。2.fscanf函數(shù)fscanf(文件類型指針,格式控制,地址列表);功能:從“文件類型指針”所標識的文件讀入一個字符流,存入“地址列表”對應(yīng)的變量中。文件的定位及隨機讀寫為了對讀寫進行控制,系統(tǒng)為每個文件設(shè)置了一個文件讀寫位置標記,用來指示接下來要讀寫的字符的位置。一般情況下,在對字符文件進行順序讀寫時,文件位置標記指向文件開頭,這時如果對文件進行讀寫操作,讀寫完第1個字符后,文件位置標記順序向后移一個位置,在下一次執(zhí)行讀寫操作時,就將位置標記指向的第2個字符進行讀出或?qū)懭?。依此類推,直到文件末尾,此時文件位置標記在最后一個數(shù)據(jù)之后。rewind(文件指針);說明:rewind函數(shù)的作用是使文件讀寫位置標記重新返回到文件的開頭,此函數(shù)沒有返回值。(2)fseek(文件類型指針,位移量,起始點);說明:“起始點”用0,1或2代替,0代表文件開始位置,1為當(dāng)前位置,2為文件末尾位置。“位移量”指以“起始點”為基點,向前移動的字節(jié)數(shù)(長整型)。(3)用ftell函數(shù)測定讀寫文件位置標記的當(dāng)前位置。ftell函數(shù)的作用是得到流式文件中文件位置標記的當(dāng)前位置,用相對于文件開頭的位移量來表示。如果調(diào)用函數(shù)時出錯(如不存在fp指向的文件),則ftell函數(shù)返回值為-1L。實例8-4-1:在磁盤文件上存有10個學(xué)生的數(shù)據(jù)。要求將第1、3、5、7、9個學(xué)生的數(shù)據(jù)輸入計算機,并在屏幕上顯示出來。文件的定位及隨機讀寫01#include<stdio.h>02structStudent_type/*學(xué)生數(shù)據(jù)類型*/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ù)可以實現(xiàn)文件的隨機讀寫。fseek函數(shù)可以按位移量來移動文件的位置標記,

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論