




已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
程序設(shè)計(jì)基礎(chǔ) C語言 廣東海洋大學(xué)信息學(xué)院 程序設(shè)計(jì)基礎(chǔ) C語言 文件 3 1 文件概念 什么是文件 文件是存儲在外部介質(zhì)上 介質(zhì) 磁盤和磁帶等外存儲器 的數(shù)據(jù)或信息的集合例如程序文件中保存著源程序數(shù)據(jù)文件中保存著數(shù)據(jù)聲音文件中保存著聲音數(shù)據(jù)磁盤上的每個(gè)文件都有唯一的名字 進(jìn)行標(biāo)識 依據(jù)文件名找到相應(yīng)的文件為什么要使用文件文件的改動(dòng)不能引起程序的改動(dòng) 即程序與數(shù)據(jù)分離不同的程序可以訪問同一數(shù)據(jù)文件中的數(shù)據(jù) 即數(shù)據(jù)共享能夠長期保存程序運(yùn)行的中間數(shù)據(jù)或結(jié)果數(shù)據(jù) 4 1 文件概念 C語言實(shí)現(xiàn)文件操作通過操作系統(tǒng)完成對文件的輸入輸出操作通過由C語言的編譯系統(tǒng)提供的一套用于文件操作的庫函數(shù) 也稱為 標(biāo)準(zhǔn)輸入 輸出庫 文件的特點(diǎn)文件是一個(gè)有序的數(shù)據(jù)序列保存的所有數(shù)據(jù)有著嚴(yán)格的排列次序 類似于數(shù)組 要訪問文件中的數(shù)據(jù) 必須按照它們的排列順序 依次進(jìn)行訪問 5 1 文件概念 文件的分類數(shù)據(jù)的組織形式ASCII碼文件 文本文件 ASCII碼文件是將要存儲的數(shù)據(jù)采用ASCII碼的形式進(jìn)行存儲數(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個(gè)字節(jié) 6 1 文件概念 文件的分類數(shù)據(jù)的組織形式二進(jìn)制文件將數(shù)據(jù)按其在內(nèi)存中的存儲方式 二進(jìn)制方式 原樣輸出到文件中存放的內(nèi)存中的數(shù)據(jù)存入磁盤的時(shí)候不需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換磁盤上保存的數(shù)據(jù)采用 語言規(guī)定的與內(nèi)存數(shù)據(jù)一致的表示形式進(jìn)行存儲例如 123 45存放字二進(jìn)制文件中將會占用4個(gè)字節(jié) 浮點(diǎn)數(shù) 7 1 文件概念 文件的分類數(shù)據(jù)的組織形式區(qū)別ASCII碼文件較為直觀 可讀性好方便人們的閱讀和理解可以直接在Windows下的記事本等工具直接觀察占用存儲空間較多而且在數(shù)據(jù)輸入輸出時(shí)必須進(jìn)行二進(jìn)制代碼和ASCII碼之間的轉(zhuǎn)換二進(jìn)制文件存儲空間的利用效率高輸入輸出時(shí)不需要進(jìn)行轉(zhuǎn)換 因而速度較快 可以節(jié)省磁盤空間和轉(zhuǎn)換時(shí)間二進(jìn)制文件不能直接識別內(nèi)存中的表示形式 不方便人們的閱讀和理解 可讀性差 8 1 文件概念 文件的分類文件的處理方式數(shù)據(jù)寫入文件或從文件中讀出數(shù)據(jù)的過程 9 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ū) 10 1 文件概念 文件的分類文件的處理方式C語言系統(tǒng)對 緩沖區(qū) 的處理方式不同產(chǎn)生了兩種不同的文件處理方式緩沖文件系統(tǒng)對每個(gè)正在使用的文件 系統(tǒng)自動(dòng)地在內(nèi)存中為其開辟一個(gè)緩沖區(qū)非緩沖文件系統(tǒng)指系統(tǒng)不會自動(dòng)開辟緩沖區(qū) 而要由程序自行設(shè)置文件的緩沖區(qū)提示在ANSIC83標(biāo)準(zhǔn)中取消了非緩沖文件系統(tǒng)對文本文件和二進(jìn)制文件均統(tǒng)一采用緩沖文件系統(tǒng)進(jìn)行處理 11 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)存 緩沖區(qū) 寫滿后再寫入文件由此可見 內(nèi)存 緩沖區(qū) 的大小 影響著實(shí)際操作外存的次數(shù) 內(nèi)存 緩沖區(qū) 越大 操作外存的次數(shù)越少 執(zhí)行速度就越快 效率就越高一般來說 文件的 緩沖區(qū) 的大小隨機(jī)器而定 12 2 文件的操作 語言中文件的操作主要是由 語言庫函數(shù)實(shí)現(xiàn)了解和掌握 語言提供的與文件有關(guān)的操作和規(guī)定文件的定義文件的狀態(tài)訪問文件的基本操作文件操作的函數(shù)屬于 語言標(biāo)準(zhǔn)輸入輸出庫中的函數(shù)應(yīng)在程序函數(shù)的前面使用預(yù)處理命令 include include 13 2 文件的操作 文件指針每個(gè)正在使用的文件都要說明一個(gè)FILE類型的結(jié)構(gòu)變量該類型就是文件讀寫所需要分配的內(nèi)存區(qū)域的類型利用一個(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)建立 14 2 文件的操作 文件指針在頭文件stdio h中定義的結(jié)構(gòu)FILE typedefstruct shortlevel 文件的緩沖區(qū)級別 滿或空的程度 unsignedflag 文件狀態(tài)標(biāo)志 charfd 文件號 intcleft 緩沖區(qū)的剩余字符 剩余空間 intmode 文件的操作模式 shortsize 緩沖區(qū)大小 char buffer 文件緩沖區(qū)的地址 位置 char curp 當(dāng)前地址指針 下一個(gè)字符的位置 shorttoken 有效性檢查控制單元 FILE 15 2 文件的操作 文件聲明定義文件類型之后才能用其聲明若干個(gè)FILE類型的變量存放文件的信息在 程序中 凡是要對已打開文件進(jìn)行操作 都要通過指向該文件結(jié)構(gòu)的指針定義FILE型 文件型 的指針變量通過文件指針變量找到與它相關(guān)的文件如果需要同時(shí)處理n個(gè)文件 一般需要說明n個(gè)指針變量使它們分別指向n個(gè)不同的文件 以實(shí)現(xiàn)對文件的訪問我們只需要定義文件類型的指針通過這個(gè)指針 程序與操作系統(tǒng)之間交流信息 使用文件 16 2 文件的操作 文件聲明格式說明FILE是文件結(jié)構(gòu)的類型名 標(biāo)識結(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 文件型指針名 17 2 文件的操作 文件的操作過程打開文件建立用戶程序與文件的聯(lián)系系統(tǒng)為文件開辟文件緩沖區(qū)操作文件對文件的讀 寫 追加和定位操作讀操作 從文件中讀出數(shù)據(jù)寫操作 向文件中寫入數(shù)據(jù)其他操作關(guān)閉文件切斷文件與程序的聯(lián)系 將文件緩沖區(qū)的內(nèi)容寫入磁盤 并釋放文件緩沖區(qū) 18 2 文件的操作 打開文件操作系統(tǒng)分配一塊內(nèi)存區(qū)域可以在這個(gè)區(qū)域上對文件進(jìn)行讀寫操作將該文件的基本狀態(tài)信息裝入內(nèi)存的該區(qū)域?yàn)榱嗽诤竺鎸ξ募?nèi)容讀寫是能夠找到這個(gè)內(nèi)存區(qū)域 需要將這個(gè)內(nèi)存區(qū)域的起始指針賦值給定義的FILE類型指針變量目的在程序與操作系統(tǒng)之間建立一種關(guān)聯(lián)通過打開文件 程序把所要操作文件的要求 如要打開的文件名 文件的操作方式 讀 寫 等通知操作系統(tǒng) 19 2 文件的操作 打開文件fopen函數(shù)的調(diào)用形式說明FILE是前面介紹的文件類型fp是一個(gè)指向FILE類型的指針變量指向被打開的文件filename文件名所要打開的文件名稱mode文件使用方式 表11 1 11 2 用具有特定含義的符號表示 FILE fp fp fopen char filename char mode 20 2 文件的操作 打開文件fopen函數(shù)的功能以mode方式打開由文件名filename指定的文件該函數(shù)的返回值為指針類型若文件打開成功返回一個(gè)指向該文件的指針若文件打開失敗返回一個(gè)空指針NULL 21 例 打開文件的正確方法是 include stdio h include stdlib h exit 0 使用此頭函數(shù)FILE fp fp fopen stu dat w 以寫方式打開當(dāng)前目錄下的stu dat文件并將返回的指向stu dat文件的文件指針賦給文件類型指針變量fp if fp NULL printf cannotopenfile n exit 0 2 文件的操作 22 例 以寫方式打開一個(gè)readme txt文件 include stdio h voidmain FILE fp fp fopen readme txt w if fp NULL printf filenotfound fclose fp elseprintf fileopenedok 可以在fopen打開文件時(shí)檢查函數(shù)的返回值是否為NULL以確定文件是否真正打開 若文件打開失敗 還使用讀寫函數(shù)對文件進(jìn)行讀寫操作將會出現(xiàn)錯(cuò)誤 2 文件的操作 23 也可以寫成下面這種方式 include stdio h include stdlib h voidmain FILE fp fp fopen readme txt w if fp NULL printf filenotfound exit 0 elseprintf fileopenedok exit 0 也是一個(gè)庫函數(shù) 定義在 stdlib h 中 它起的作用是 1 關(guān)閉所有文件 2 程序正常退出 3 返回操作系統(tǒng) 4 將 0 返回操作系統(tǒng) 一般情況下 exit 0 表示在程序設(shè)計(jì)者控制的范圍內(nèi)正常退出 exit 0 則表示程序非正常退出 2 文件的操作 24 2 文件的操作 文件的關(guān)閉當(dāng)對文件操作結(jié)束后 程序要通知操作系統(tǒng)文件使用完畢關(guān)閉該文件意味著釋放文件指針以供別的程序使用可以避免文件中數(shù)據(jù)的丟失否則容易導(dǎo)致對文件的誤操作尤其是剛對文件進(jìn)行寫操作 如不關(guān)閉文件 可能會丟失剛剛寫入的數(shù)據(jù)關(guān)閉文件采用C庫函數(shù)fclose 25 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 文件指針 26 例 以讀方式打開一個(gè)文本文件readme txt然后關(guān)閉該文件 include stdio h voidmain FILE fp fp fopen readme txt r if fp NULL printf filenotfound n else printf fileopenedok n fclose fp printf fileclosed n 2 文件的操作 27 文件的讀寫是整個(gè)文件操作的核心 也是最靈活多變的部分 針對文本文件和二進(jìn)制文件的不同性質(zhì)進(jìn)行分類操作 對文本文件可按字符讀寫或按字符串讀寫 對二進(jìn)制文件可按成塊讀寫或格式化讀寫 各種C語言編譯系統(tǒng)都提供了豐富的文件讀寫函數(shù) 有一些庫函數(shù)事實(shí)上已成為標(biāo)準(zhǔn) 讀寫字符C提供fgetc和fputc函數(shù)對文本文件進(jìn)行字符的讀寫 函數(shù)定義格式 fgetc和fputc fgetc函數(shù)從輸入流的當(dāng)前位置返回一個(gè)字符 并將文件指針指示器移到下一個(gè)字符處 如果已經(jīng)到文件尾部 函數(shù)返回EOF 此時(shí)表示本次操作結(jié)束 fputc函數(shù)完成將字符的值寫入所指定的流文件的當(dāng)前位置處 并將文件指針后移一位 該函數(shù)的返回值是所寫入字符的值 出錯(cuò)時(shí)返回EOF 2 文件的操作 28 讀寫字符串fgets 函數(shù)從文件中讀取至多num 1個(gè)字符 并將其放入str指向的數(shù)組中 函數(shù)形式為 char fgets char str intnum FILE STREAM fputs 函數(shù)將str指向的字符串寫入文件 操作成功時(shí) 函數(shù)返回值為0值 失敗時(shí)返回非0值 函數(shù)形式為 intfputs char str FIILE stream 例 從一個(gè)文本文件中test1 txt中讀出字符串 再寫入另一個(gè)文件test2 txt中 include include 29 include stdio h main FILE fp charc fp fopen test txt w 以寫的方式打開文件 if fp NULL printf Filedoesn texist n exit 0 while c fgetchar n 只要輸入字符為非空格符 fputc c fp 寫入文件一個(gè)字符 fclose fp 例 從鍵盤輸入字符存儲在磁盤文件test txt中 30 例11 5 使用fputs 與fgets 函數(shù) 功能 將指定數(shù)組的字符串寫入文本文件中 并讀到另一個(gè)指定數(shù)組中 首先 在c盤根目錄下用記事本創(chuàng)建文本文件hello txt include includeintmain FILE fpfile charintext 10 hello outtext 10 if fpfile fopen c hello txt w NULL 第1個(gè) 表示轉(zhuǎn)議字符 printf openlost exit 0 fputs intext fpfile rewind fpfile fgets outtext 1024 fpfile fclose fpfile printf s n outtext 31 例 11 6fprintf 及fscanf 函數(shù) include includevoidmain FILE fp floatfenglish fmath fcomputer ftotal 各科成績及總成績charname 20 姓名inti if fp fopen c student dat w NULL printf openfale exit 0 printf 姓名 t英語 t數(shù)學(xué) t計(jì)算機(jī) n for i 0 i 1 i print
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)實(shí)表現(xiàn)材料二
- 四川省遂寧市2024-2025學(xué)年高二下學(xué)期期末考試英語試卷
- 2025年農(nóng)村文化禮堂建設(shè)實(shí)施方案:探索鄉(xiāng)村文化融合發(fā)展的創(chuàng)新模式
- 技術(shù)賦能教育實(shí)踐與創(chuàng)新教學(xué)平臺的融合研究
- 人工智能在教育心理學(xué)中的應(yīng)用前景
- 證照管理專員崗位面試問題及答案
- 商業(yè)教育中教育技術(shù)的應(yīng)用與挑戰(zhàn)
- 教育領(lǐng)域科技創(chuàng)新政策深度解讀
- 2025至2030古玩市場前景分析及發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 兒童醫(yī)學(xué)科普護(hù)理
- 2024屆甘南市語文八年級第二學(xué)期期末聯(lián)考試題含解析
- 無人機(jī)航空測繪與后期制作 課件 第十二課時(shí) 現(xiàn)場飛行流程
- 2024年梅州市大埔縣重點(diǎn)中學(xué)小升初語文入學(xué)考試卷含答案
- (正式版)JBT 14449-2024 起重機(jī)械焊接工藝評定
- 2022-2023學(xué)年北京市東城區(qū)高二(下)期末化學(xué)試卷(含解析)
- 防溺水老師培訓(xùn)課件
- 《植物生長與環(huán)境》課程標(biāo)準(zhǔn)(含課程思政)
- 鐵路行車組織(高職)全套教學(xué)課件
- 注塑標(biāo)準(zhǔn)成型條件表電子表格模板
- 道閘系統(tǒng)施工方案
- 配置管理與漏洞修復(fù)
評論
0/150
提交評論