文件.ppt_第1頁(yè)
文件.ppt_第2頁(yè)
文件.ppt_第3頁(yè)
文件.ppt_第4頁(yè)
文件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩37頁(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)介

文件的作用 長(zhǎng)期保存數(shù)據(jù) 程序與文件的關(guān)系 1 可通過(guò)程序來(lái)建立和更新文件內(nèi)容 2 程序中處理的數(shù)據(jù)可以從文件中獲得 10 1文件的基本概念 計(jì)算機(jī)可處理的文件 源程序 圖形文件 音頻文件 數(shù)據(jù)文件等等 按數(shù)據(jù)的組織形式可分為 文本文件 二進(jìn)制文件 c語(yǔ)言可以對(duì)文本文件和二進(jìn)制文件進(jìn)行讀寫(xiě)操作 c語(yǔ)言把每一個(gè)文件都看作是一個(gè)有序的字節(jié)流 流 是文件和程序之間通訊的通道 三種與文件關(guān)聯(lián)的流 1 標(biāo)準(zhǔn)輸入流 可讀取來(lái)自鍵盤(pán)的數(shù)據(jù) 2 標(biāo)準(zhǔn)輸出流 可把數(shù)據(jù)打印到屏幕上 3 標(biāo)準(zhǔn)錯(cuò)誤流 可指出對(duì)文件的錯(cuò)誤操作類(lèi)型 緩沖文件系統(tǒng) 標(biāo)準(zhǔn)i o 每一個(gè)被打開(kāi)的文件都會(huì)在內(nèi)存開(kāi)辟一個(gè)緩沖區(qū) 優(yōu)越性 提高對(duì)數(shù)據(jù)的處理速度 減少對(duì)磁盤(pán)的讀寫(xiě)次數(shù) 非緩沖文件系統(tǒng) 系統(tǒng)i o 系統(tǒng)不設(shè)置緩沖區(qū) 由程序設(shè)置 或稱低層文件系統(tǒng) 優(yōu)越性 靈活 高效 提醒 標(biāo)準(zhǔn)i o與系統(tǒng)i o分別采用不同的輸入 輸出函數(shù) 1 對(duì)文件操作所需的 文件信息 是一結(jié)構(gòu)體變量 且該結(jié)構(gòu)體變量由系統(tǒng)定義 typedefstruct shortleve1 unsignedflags charfd unsignedcharhold shortbsize unsignedchar buffer unsignedchar curp unsignedistemp shorttokem file 文件指針 定義形式 2 用戶只需定義指向文件類(lèi)型的指針變量即可 如 file fp1 fp2 3 系統(tǒng)對(duì)文件提供的信息有 緩沖區(qū)的狀態(tài) 緩沖區(qū)中未被處理的字符個(gè)數(shù) 文件當(dāng)前的讀寫(xiě)位置 緩沖區(qū)的地址 緩沖區(qū)的大小 對(duì)任何文件的操作步驟 打開(kāi)文件 關(guān)閉文件 讀或?qū)?10 2文件的基本操作 標(biāo)準(zhǔn)i o的讀寫(xiě)函數(shù) 1 讀寫(xiě)一個(gè)字符 fgetc fputc 2 讀寫(xiě)一個(gè)字符串 fgets fputs 3 格式化讀寫(xiě)變量 fscanf fprintf 4 格式化讀寫(xiě)一個(gè)記錄 塊 fread fwrite 一 文件打開(kāi) 使用fopen 函數(shù) 調(diào)用方式 若正確 則返回一個(gè)指向該文件的指針 若錯(cuò)誤 則返回錯(cuò)誤標(biāo)志null fopen 文件名 文件操作方式 10 2 1建立順序文件 r 以只讀方式打開(kāi)一個(gè)文本文件 w 以只寫(xiě)方式打開(kāi)一個(gè)文本文件 a 以追加方式打開(kāi)一個(gè)文本文件 r 以讀 寫(xiě)方式打開(kāi)一個(gè)文本文件 w 以讀 寫(xiě)方式建立一個(gè)新的文本文件 a 以讀 寫(xiě)方式打開(kāi)一個(gè)文本文件 二 文件的打開(kāi)模式 rb 以只讀方式打開(kāi)一個(gè)二進(jìn)制文件 wb 以只寫(xiě)方式打開(kāi)一個(gè)二進(jìn)制文件 ab 以追加方式打開(kāi)一個(gè)二進(jìn)制文件 rb 以讀 寫(xiě)方式打開(kāi)一個(gè)二進(jìn)制文件 wb 以讀 寫(xiě)方式建立一個(gè)新的二進(jìn)制文件 ab 以讀 寫(xiě)方式打開(kāi)一個(gè)二進(jìn)制文件 includemain file p p fopen test txt r if p null printf fileopenerror n elseprintf fileopenok n 例 討論 1 文件 test txt 所在位置如何 2 在程序結(jié)束之前如果沒(méi)有關(guān)閉打開(kāi)的文件 文件會(huì)不會(huì)遭到破壞 3 文件test txt的內(nèi)容是什么 c語(yǔ)言規(guī)定 fopen 函數(shù)中的文件名可以是當(dāng)前工作目錄 相對(duì)路徑 下的也可以是指定路徑 絕對(duì)路徑 下的 如 fopen c dos config sys r 三 文件關(guān)閉 使用fclose 函數(shù) 調(diào)用方式 作用 關(guān)閉一個(gè)已打開(kāi)的文件 釋放文件信息區(qū) fclose 文件指針變量 上例的改進(jìn) includemain file p p fopen test txt r if p null printf fileopenerror n else 文件處理語(yǔ)句段 fclose fp 四 向文件中寫(xiě)數(shù)據(jù)的函數(shù) 對(duì)文件不論是讀還是寫(xiě) c程序只把文件看作是字節(jié)流 注意 1 向文件中寫(xiě)入數(shù)據(jù)時(shí) 若文件不存在 則系統(tǒng)會(huì)創(chuàng)建一個(gè)新文件 2 若文件已存在 則 以 w 方式打開(kāi)文件時(shí) 文件原有內(nèi)容在打開(kāi)的同時(shí)會(huì)被沖掉 以 a 方式打開(kāi)文件時(shí) 文件原有內(nèi)容保留 向文件寫(xiě)入的內(nèi)容插入到文件的尾部 1 向文件流中輸入一個(gè)字符 charfputc charch file fp 若正確 返回字符ch 若錯(cuò)誤 返回eof 2 向文件流中寫(xiě)入一個(gè)字符串 intfputs char s file fp 若正確 返回一個(gè)非負(fù)數(shù) 若錯(cuò)誤 返回eof 3 按指定的格式向文件流中輸入數(shù)據(jù) fprintf file fp char fm 變量名表列 如 fprintf fp d f s a b w 格式字符串 與格式符對(duì)應(yīng)的變量 例 編寫(xiě)一程序 把下面的內(nèi)容寫(xiě)入文件mytest1 txt中 輸入時(shí)以字符 作為結(jié)束 includemain file fp charch fp fopen mytest1 txt w if fp null printf fileopenerror n elsewhile ch getchar fputc ch fp fclose fp apple505 5pear404 4orange303 3 運(yùn)行情況如下 例2 采用字符串輸入方式將上面的內(nèi)容輸入到文件mytest2 txt中去 以不輸入任何字符直接回車(chē)作為輸入結(jié)束 apple505 5pear404 4orange303 3 include includemain file fp charw 20 fp fopen mytest2 txt w if fp null printf fileopenerror n elsewhile strlen gets w 0 fputs w fp fputs n fp fclose fp 1 若無(wú)此語(yǔ)句 程序的運(yùn)行結(jié)果會(huì)是怎樣的 2 怎樣結(jié)束程序的運(yùn)行 思考 輸入的字符串的長(zhǎng)度不要超過(guò)數(shù)組定義的大小 否則會(huì)出錯(cuò) apple505 5 pear404 4 orange303 3 結(jié)果 查看當(dāng)前目錄下的mytest2 txt文件的內(nèi)容 運(yùn)行情況如下 例3 按指定輸入格式把上面的內(nèi)容輸入到文件mytest3 txt中去 以任意單個(gè)字符作為輸入結(jié)束 apple505 5pear404 4orange303 3 例 includemain file fp inta floatb charch w 20 fp fopen mystest3 txt w if fp null printf fileopenerror n else scanf s w while strlen w 1 scanf d f 運(yùn)行情況如下 使用fputc fputs fprintf 可以達(dá)到同一個(gè)目的 17 2 2讀取順序文件中的數(shù)據(jù) 文件的結(jié)束標(biāo)志 eof 1 從文件流中讀取一個(gè)字符 fgetc fp 返回值 讀取的字符 有三個(gè)重要的讀函數(shù) 指向文件的指針 2 從文件流中讀取一字符串 讀一行字符 作用 從文件流中讀取n 1字符 放入數(shù)組s中 fgets chars intn fp 返回值 s所指的字符串 數(shù)組名 n個(gè)字符數(shù) 文件指針變量 注意 1 第n個(gè)字符為系統(tǒng)加入的空字符 0 2 若在第n 1個(gè)字符前遇到換行符 停止讀寫(xiě) 3 若遇到文件結(jié)束或調(diào)用出錯(cuò) 返回null 3 按指定格式從文件流中讀取變量 fscanf 文件指針變量 格式控制符字符串 變量地址表列 作用 從文件流中按指定的格式 讀取變量 并將讀取的變量保存到對(duì)應(yīng)的變量中 例 fscanf fp s d f name 文件指針變量 1 從文件中讀 fread buffer size count fp 2 向文件中寫(xiě) fwrite buffer size count fp 其中 buffer 數(shù)據(jù)存儲(chǔ)的起始地址 size 要讀寫(xiě)的字節(jié)數(shù) count 讀寫(xiě)的數(shù)據(jù)項(xiàng) fp 文件指針變量 返回值 count的值 注意 使用fread fwrite來(lái)讀寫(xiě)文件時(shí) 文件必須以二進(jìn)制的方式打開(kāi) 10 2 3按 記錄 的方式讀寫(xiě) 10 2 4隨機(jī)存取文件 問(wèn)題 要求打開(kāi)文件后 對(duì)指定位置上的數(shù)據(jù)進(jìn)行讀寫(xiě)操作 減少一些不必要的中間環(huán)節(jié) 解決的辦法 把文件指針移到指定的位置即可 關(guān)鍵步驟 文件的定位 一 文件定位函數(shù) fseek 文件指針變量 位移量 起始點(diǎn) 注 1 起始點(diǎn)的取值只有3種 2 位移量 以起始點(diǎn)為基點(diǎn)移動(dòng)的字節(jié)數(shù) 0 文件開(kāi)始處 1 文件位置指針的當(dāng)前位置 2 文件尾 3 位移量應(yīng)為long型 4 fseek 的返回值 0 成功 非零 失敗 例 fseek fp 20l 0 將位置指針移到離文件頭20個(gè)字節(jié)處 fseek fp 10l 1 將位置指針移到離文件尾30個(gè)字節(jié)處 fseek fp 30l 2 將位置從當(dāng)前位置向后移10個(gè)字節(jié) 注意 此處的20l是20和字母l 二 位置函數(shù) ftell 文件指針變量 作用 返回文件指針的當(dāng)前指向位置 返回值 0 文件指針的當(dāng)前指向 1 出錯(cuò) 例 文件data1 txt的內(nèi)容如下 thisisatest c語(yǔ)言程序設(shè)計(jì) 隨機(jī)讀寫(xiě)函數(shù)測(cè)試 要求編寫(xiě)一程序隨機(jī)讀出指定的記錄 三 重新定位函數(shù) rewind 文件指針變量 作用 使文件指針?lè)祷氐轿募拈_(kāi)頭 無(wú)返回值 include includemain file fp intloc1 loc2 longd 8l charw fp fopen data1 txt r if fp null printf error n else loc1 fseek fp d 0 if loc1 0 w fgetc fp printf

溫馨提示

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