C語言程序設(shè)計(jì)基礎(chǔ)-第八章PPT課件_第1頁
C語言程序設(shè)計(jì)基礎(chǔ)-第八章PPT課件_第2頁
C語言程序設(shè)計(jì)基礎(chǔ)-第八章PPT課件_第3頁
C語言程序設(shè)計(jì)基礎(chǔ)-第八章PPT課件_第4頁
C語言程序設(shè)計(jì)基礎(chǔ)-第八章PPT課件_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、程序設(shè)計(jì)基礎(chǔ)(C語言),文件,2,1.文件概念,什么是文件? 文件是存儲(chǔ)在外部介質(zhì)上(介質(zhì):磁盤和磁帶等外存儲(chǔ)器)的數(shù)據(jù)或信息的集合 例如 程序文件中保存著源程序 數(shù)據(jù)文件中保存著數(shù)據(jù) 聲音文件中保存著聲音數(shù)據(jù) 磁盤上的每個(gè)文件都有唯一的名字,進(jìn)行標(biāo)識(shí),依據(jù)文件名找到相應(yīng)的文件 為什么要使用文件 文件的改動(dòng)不能引起程序的改動(dòng),即程序與數(shù)據(jù)分離 不同的程序可以訪問同一數(shù)據(jù)文件中的數(shù)據(jù),即數(shù)據(jù)共享 能夠長期保存程序運(yùn)行的中間數(shù)據(jù)或結(jié)果數(shù)據(jù),3,1.文件概念,C語言實(shí)現(xiàn)文件操作 通過操作系統(tǒng)完成對(duì)文件的輸入輸出操作 通過由C語言的編譯系統(tǒng)提供的一套用于文件操作的庫函數(shù),也稱為“標(biāo)準(zhǔn)輸入輸出庫” 文件

2、的特點(diǎn) 文件是一個(gè)有序的數(shù)據(jù)序列 保存的所有數(shù)據(jù)有著嚴(yán)格的排列次序(類似于數(shù)組) 要訪問文件中的數(shù)據(jù),必須按照它們的排列順序,依次進(jìn)行訪問,4,1.文件概念,文件的分類 數(shù)據(jù)的組織形式 ASCII碼文件 ASCII碼文件是將要存儲(chǔ)的數(shù)據(jù)采用ASCII碼的形式進(jìn)行存儲(chǔ) 數(shù)據(jù)按順序組成一個(gè)一個(gè)的字符序列 每一個(gè)字符用一個(gè)ASCII碼來表示,占用1個(gè)字節(jié) ASCII碼形式的文件在文本編輯器下可以直接閱讀 保存在內(nèi)存中的所有數(shù)據(jù)在存入文件的時(shí)候都要先轉(zhuǎn)換為等價(jià)的字符形式 當(dāng)要從文件中讀取數(shù)據(jù)時(shí),在將字符串轉(zhuǎn)換為浮點(diǎn)數(shù) 例如:123.45(浮點(diǎn)數(shù)) 將123.45轉(zhuǎn)換為字符串“123.45” 再存放,5

3、,1.文件概念,文件的分類 數(shù)據(jù)的組織形式 二進(jìn)制文件 將數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)方式(二進(jìn)制方式)原樣輸出到文件中存放的 內(nèi)存中的數(shù)據(jù)存入磁盤的時(shí)候不需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換 磁盤上保存的數(shù)據(jù)采用語言規(guī)定的與內(nèi)存數(shù)據(jù)一致的表示形式進(jìn)行存儲(chǔ) 例如:123.45存放字二進(jìn)制文件中將會(huì)占用4個(gè)字節(jié)(浮點(diǎn)數(shù)),6,1.文件概念,文件的分類 數(shù)據(jù)的組織形式 區(qū)別 ASCII碼文件較為直觀、可讀性好 方便人們的閱讀和理解 可以直接在Windows下的記事本等工具直接觀察 占用存儲(chǔ)空間較多而且在數(shù)據(jù)輸入輸出時(shí)必須進(jìn)行二進(jìn)制代碼和ASCII碼之間的轉(zhuǎn)換 二進(jìn)制文件存儲(chǔ)空間的利用效率高 輸入輸出時(shí)不需要進(jìn)行轉(zhuǎn)換,因而速

4、度較快,可以節(jié)省磁盤空間和轉(zhuǎn)換時(shí)間 二進(jìn)制文件不能直接識(shí)別內(nèi)存中的表示形式,不方便人們的閱讀和理解,可讀性差,7,1.文件概念,文件的分類 文件的處理方式 數(shù)據(jù)寫入文件或從文件中讀出數(shù)據(jù)的過程,8,1.文件概念,文件的分類 文件的處理方式 “寫文件” 將保存在內(nèi)存中的數(shù)據(jù)寫入磁盤 首先要建立一個(gè)“輸出文件緩沖區(qū)” 通過該緩沖區(qū)可將內(nèi)存中的數(shù)據(jù)存入磁盤,以文件的形式保存 “讀文件” 將保存在文件中的數(shù)據(jù)裝入內(nèi)存 首先要建立一個(gè)“輸入文件緩沖區(qū)”,將文件中的數(shù)據(jù)裝入緩沖區(qū) 然后再由緩沖區(qū)存入程序可以操作的內(nèi)存數(shù)據(jù)區(qū),9,1.文件概念,文件的分類 文件的處理方式 C語言系統(tǒng)對(duì)緩沖區(qū)的處理方式不同產(chǎn)生

5、了兩種不同的文件處理方式 緩沖文件系統(tǒng) 對(duì)每個(gè)正在使用的文件,系統(tǒng)自動(dòng)地在內(nèi)存中為其開辟一個(gè)緩沖區(qū) 非緩沖文件系統(tǒng) 指系統(tǒng)不會(huì)自動(dòng)開辟緩沖區(qū),而要由程序自行設(shè)置文件的緩沖區(qū) 提示 在ANSI C83標(biāo)準(zhǔn)中取消了非緩沖文件系統(tǒng) 對(duì)文本文件和二進(jìn)制文件均統(tǒng)一采用緩沖文件系統(tǒng)進(jìn)行處理,10,1.文件概念,文件的分類 文件的處理方式 緩沖文件的特點(diǎn) 緩沖區(qū)是一個(gè)連接計(jì)算機(jī)內(nèi)存數(shù)據(jù)與外存文件的橋梁 在內(nèi)存開辟一個(gè)“緩沖區(qū)”,為程序中的每一個(gè)文件使用 執(zhí)行讀文件的操作時(shí),從磁盤文件將數(shù)據(jù)先讀如內(nèi)存“緩沖區(qū)”,裝滿后再從內(nèi)存“緩沖區(qū)”依此讀入進(jìn)接收的變量 執(zhí)行寫文件的操作時(shí),先將數(shù)據(jù)寫入內(nèi)存“緩沖區(qū)”,待內(nèi)

6、存“緩沖區(qū)”寫滿后再寫入文件 由此可見,內(nèi)存“緩沖區(qū)”的大小,影響著實(shí)際操作外存的次數(shù),內(nèi)存“緩沖區(qū)”越大,操作外存的次數(shù)越少,執(zhí)行速度就越快、效率就越高 一般來說:文件的“緩沖區(qū)”的大小隨機(jī)器而定,11,2.文件的操作,語言中文件的操作主要是由語言庫函數(shù)實(shí)現(xiàn) 了解和掌握語言提供的與文件有關(guān)的操作和規(guī)定 文件的定義 文件的狀態(tài) 訪問文件的基本操作 文件操作的函數(shù)屬于語言標(biāo)準(zhǔn)輸入輸出庫中的函數(shù) 應(yīng)在程序函數(shù)的前面使用預(yù)處理命令#include“ #include ,12,2.文件的操作,文件指針 每個(gè)正在使用的文件都要說明一個(gè)FILE類型的結(jié)構(gòu)變量 該類型就是文件讀寫所需要分配的內(nèi)存區(qū)域的類型

7、利用一個(gè)結(jié)構(gòu)體類型的變量存放 該結(jié)構(gòu)變量用于存放文件的有關(guān)信息 文件的名字、文件的性質(zhì)、文件的當(dāng)前狀態(tài)等 FILE 類型由系統(tǒng)定義 它包含的成員即FILE的各個(gè)分量由操作系統(tǒng)自動(dòng)定義 在頭文件stdio.h中定義 通過文件結(jié)構(gòu)的數(shù)據(jù)集合進(jìn)行輸入輸出處理 文件結(jié)構(gòu)在打開文件時(shí)由操作系統(tǒng)自動(dòng)建立,13,2.文件的操作,文件指針 在頭文件stdio.h中定義的結(jié)構(gòu)FILE,typedef struct short level; /*文件的緩沖區(qū)級(jí)別(滿或空的程度)*/ unsigned flag; /*文件狀態(tài)標(biāo)志*/ char fd; /*文件號(hào)*/ int cleft; /*緩沖區(qū)的剩余字符(剩

8、余空間)*/ int mode; /*文件的操作模式*/ short size; /*緩沖區(qū)大小*/ char *buffer; /*文件緩沖區(qū)的地址(位置)*/ char *curp; /*當(dāng)前地址指針(下一個(gè)字符的位置)*/ short token; /*有效性檢查控制單元*/ FILE;,14,2.文件的操作,文件聲明 定義文件類型之后才能用其聲明若干個(gè)FILE類型的變量 存放文件的信息 在程序中,凡是要對(duì)已打開文件進(jìn)行操作,都要通過指向該文件結(jié)構(gòu)的指針 定義FILE型(文件型)的指針變量 通過文件指針變量找到與它相關(guān)的文件 如果需要同時(shí)處理n個(gè)文件,一般需要說明n個(gè)指針變量使它們分別指

9、向n個(gè)不同的文件,以實(shí)現(xiàn)對(duì)文件的訪問我們只需要定義文件類型的指針 通過這個(gè)指針,程序與操作系統(tǒng)之間交流信息,使用文件,15,2.文件的操作,文件聲明 格式 說明 FILE是文件結(jié)構(gòu)的類型名,標(biāo)識(shí)結(jié)構(gòu)類型 文件型指針是指向文件結(jié)構(gòu)的指針 例如:FILE *p; /*p是一指向文件結(jié)構(gòu)的指針變量*/ 提示 語言中標(biāo)準(zhǔn)設(shè)備文件是由系統(tǒng)控制的 它們由系統(tǒng)自動(dòng)打開和關(guān)閉 用戶在程序中可以直接使用,無需再進(jìn)行說明 語言中提供了三個(gè)標(biāo)準(zhǔn)設(shè)備文件的指針 stdin 標(biāo)準(zhǔn)輸入文件(鍵盤) stdout 標(biāo)準(zhǔn)輸出文件(顯示器) stderr 標(biāo)準(zhǔn)錯(cuò)誤輸出文件(顯示器),FILE * 文件型指針名;,16,2.文件

10、的操作,文件的操作過程 打開文件 建立用戶程序與文件的聯(lián)系 系統(tǒng)為文件開辟文件緩沖區(qū) 操作文件 對(duì)文件的讀、寫、追加和定位操作 讀操作:從文件中讀出數(shù)據(jù) 寫操作:向文件中寫入數(shù)據(jù) 其他操作 關(guān)閉文件 切斷文件與程序的聯(lián)系,將文件緩沖區(qū)的內(nèi)容寫入磁盤,并釋放文件緩沖區(qū),17,2.文件的操作,打開文件 操作系統(tǒng)分配一塊內(nèi)存區(qū)域 可以在這個(gè)區(qū)域上對(duì)文件進(jìn)行讀寫操作 將該文件的基本狀態(tài)信息裝入內(nèi)存的該區(qū)域 為了在后面對(duì)文件內(nèi)容讀寫是能夠找到這個(gè)內(nèi)存區(qū)域,需要將這個(gè)內(nèi)存區(qū)域的起始指針賦值給定義的FILE類型指針變量 通過庫函數(shù)fopen調(diào)用實(shí)現(xiàn) 目的 在程序與操作系統(tǒng)之間建立一種關(guān)聯(lián) 通過打開文件,程序

11、把所要操作文件的要求:如要打開的文件名、文件的操作方式(讀/寫)等通知操作系統(tǒng),18,2.文件的操作,打開文件 fopen函數(shù)的調(diào)用形式 說明 FILE是前面介紹的文件類型 fp是一個(gè)指向FILE類型的指針變量 指向被打開的文件 filename文件名 所要打開的文件名稱 mode文件使用方式 用具有特定含義的符號(hào)表示,FILE* fp; fp=fopen(char *filename,char *mode),19,2.文件的操作,打開文件 fopen函數(shù)的功能 以mode方式打開由文件名filename指定的文件 該函數(shù)的返回值為指針類型 若文件打開成功 返回一個(gè)指向該文件的指針 若文件打開

12、失敗 返回一個(gè)空指針NULL,20,例:打開文件的正確方法是 #include“stdio.h” FILE *fp; fp=fopen(“stu.dat”,“w”); /*以寫方式打開當(dāng)前目錄下的stu.dat文件 并將返回的指向stu.dat文件的文件指針 賦給文件類型指針變量fp*/ if(fp=NULL) printf(“cannot open filen” ); exit(0);,2.文件的操作,21,【例】以寫方式打開一個(gè)readme.txt文件。 #include “stdio.h” void main() FILE *fp; fp=fopen(“readme.txt”,“w”);

13、 if(fp=NULL) printf(“file not found!”); fclose(fp); else printf(“file opened ok!”); ,可以在fopen打開文件時(shí) 檢查函數(shù)的返回值是否 為NULL以確定文件是否 真正打開,若文件打開 失敗,還使用讀寫函數(shù) 對(duì)文件進(jìn)行讀寫操作將 會(huì)出現(xiàn)錯(cuò)誤。,2.文件的操作,22,也可以寫成下面這種方式: #include “stdio.h” void main() FILE *fp; fp=fopen(“readme.txt”,“w”); if (fp=NULL) printf(“file not found!”); exit

14、(0); else printf(“file opened ok!”); ,exit(0)也是一個(gè)庫 函數(shù),定義在“stdio.h” 中,它起的作用是: (1)關(guān)閉所有文件; (2)程序正常退出; (3)返回操作系統(tǒng); (4)將(0)返回操作 系統(tǒng)。 一般情況下:exit(0) 表示在程序設(shè)計(jì)者控制 的范圍內(nèi)正常退出; exit(!0)則表示程序 非正常退出。,2.文件的操作,23,2.文件的操作,文件的關(guān)閉 當(dāng)對(duì)文件操作結(jié)束后,程序要通知操作系統(tǒng)文件使用完畢 關(guān)閉該文件 意味著釋放文件指針以供別的程序使用 可以避免文件中數(shù)據(jù)的丟失 否則容易導(dǎo)致對(duì)文件的誤操作 尤其是剛對(duì)文件進(jìn)行寫操作,如不關(guān)

15、閉文件,可能會(huì)丟失剛剛寫入的數(shù)據(jù) 關(guān)閉文件采用 C庫函數(shù)fclose,24,2.文件的操作,文件的關(guān)閉 fclose函數(shù)的調(diào)用形式 說明 文件指針是通過fopen打開的文件 fclose函數(shù)關(guān)閉fopen打開的文件 fclose函數(shù)返回值 返回值為整型 正常關(guān)閉時(shí)返回為0,否則返回為非0數(shù),表示關(guān)閉出錯(cuò) 函數(shù)的功能 關(guān)閉由文件指針指定的文件 切斷緩沖區(qū)與該文件的聯(lián)系 釋放文件指針,fclose (文件指針);,25,例:以讀方式打開一個(gè)文本文件readme.txt然后關(guān)閉該文件。 #include “stdio.h” void main() FILE *fp; fp=fopen(“readme

16、.txt”,“r”); if (fp=NULL) printf(“file not found!n”); else printf(“file opened ok!n”); fclose(fp); printf(“file closed!n”); ,2.文件的操作,26,文件的讀寫是整個(gè)文件操作的核心,也是最靈活多變的部分。,針對(duì)文本文件和二進(jìn)制文件的不同性質(zhì)進(jìn)行分類操作,對(duì)文本文件可按字符讀寫或按字符串讀寫;對(duì)二進(jìn)制文件可按成塊讀寫或格式化讀寫。各種C語言編譯系統(tǒng)都提供了豐富的文件讀寫函數(shù),有一些庫函數(shù)事實(shí)上已成為標(biāo)準(zhǔn)。,讀寫字符 C提供fgetc和fputc函數(shù)對(duì)文本文件進(jìn)行字符的讀寫。,函

17、數(shù)定義格式: fgetc和fputc,fgetc函數(shù)從輸入流的當(dāng)前位置返回一個(gè)字 符,并將文件指針指示器移到下一個(gè)字符 處,如果已經(jīng)到文件尾部,函數(shù)返回EOF, 此時(shí)表示本次操作結(jié)束。fputc函數(shù)完成將 字符的值寫入所指定的流文件的當(dāng)前位置 處,并將文件指針后移一位。該函數(shù)的返 回值是所寫入字符的值,出錯(cuò)時(shí)返回EOF。,2.文件的操作,27,例:從鍵盤輸入字符存儲(chǔ)在磁盤文件test.txt中。 #include stdio.h main() FILE *fp; char c; fp = fopen(test.txt,w); /*以寫的方式打開文件*/ if(fp = NULL) printf(File doesnt existn); exit(0); while (c= fgetchar() != n); /*只要輸入字符為非空格符*/ fputc(c,fp); /* 寫入文件一個(gè)字符 *

溫馨提示

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