程序設(shè)計(jì)基礎(chǔ)文件使用PPT課件_第1頁(yè)
程序設(shè)計(jì)基礎(chǔ)文件使用PPT課件_第2頁(yè)
程序設(shè)計(jì)基礎(chǔ)文件使用PPT課件_第3頁(yè)
程序設(shè)計(jì)基礎(chǔ)文件使用PPT課件_第4頁(yè)
程序設(shè)計(jì)基礎(chǔ)文件使用PPT課件_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

程序設(shè)計(jì)基礎(chǔ) C語(yǔ)言 廣東海洋大學(xué)信息學(xué)院 程序設(shè)計(jì)基礎(chǔ) C語(yǔ)言 文件 3 1 文件概念 什么是文件 文件是存儲(chǔ)在外部介質(zhì)上 介質(zhì) 磁盤(pán)和磁帶等外存儲(chǔ)器 的數(shù)據(jù)或信息的集合例如程序文件中保存著源程序數(shù)據(jù)文件中保存著數(shù)據(jù)聲音文件中保存著聲音數(shù)據(jù)磁盤(pán)上的每個(gè)文件都有唯一的名字 進(jìn)行標(biāo)識(shí) 依據(jù)文件名找到相應(yīng)的文件為什么要使用文件文件的改動(dòng)不能引起程序的改動(dòng) 即程序與數(shù)據(jù)分離不同的程序可以訪問(wèn)同一數(shù)據(jù)文件中的數(shù)據(jù) 即數(shù)據(jù)共享能夠長(zhǎng)期保存程序運(yùn)行的中間數(shù)據(jù)或結(jié)果數(shù)據(jù) 4 1 文件概念 C語(yǔ)言實(shí)現(xiàn)文件操作通過(guò)操作系統(tǒng)完成對(duì)文件的輸入輸出操作通過(guò)由C語(yǔ)言的編譯系統(tǒng)提供的一套用于文件操作的庫(kù)函數(shù) 也稱(chēng)為 標(biāo)準(zhǔn)輸入 輸出庫(kù) 文件的特點(diǎn)文件是一個(gè)有序的數(shù)據(jù)序列保存的所有數(shù)據(jù)有著嚴(yán)格的排列次序 類(lèi)似于數(shù)組 要訪問(wèn)文件中的數(shù)據(jù) 必須按照它們的排列順序 依次進(jìn)行訪問(wèn) 5 1 文件概念 文件的分類(lèi)數(shù)據(jù)的組織形式ASCII碼文件 文本文件 ASCII碼文件是將要存儲(chǔ)的數(shù)據(jù)采用ASCII碼的形式進(jìn)行存儲(chǔ)數(shù)據(jù)按順序組成一個(gè)一個(gè)的字符序列每一個(gè)字符用一個(gè)ASCII碼來(lái)表示 占用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 文件概念 文件的分類(lèi)數(shù)據(jù)的組織形式二進(jìn)制文件將數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)方式 二進(jìn)制方式 原樣輸出到文件中存放的內(nèi)存中的數(shù)據(jù)存入磁盤(pán)的時(shí)候不需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換磁盤(pán)上保存的數(shù)據(jù)采用 語(yǔ)言規(guī)定的與內(nèi)存數(shù)據(jù)一致的表示形式進(jìn)行存儲(chǔ)例如 123 45存放字二進(jìn)制文件中將會(huì)占用4個(gè)字節(jié) 浮點(diǎn)數(shù) 7 1 文件概念 文件的分類(lèi)數(shù)據(jù)的組織形式區(qū)別ASCII碼文件較為直觀 可讀性好方便人們的閱讀和理解可以直接在Windows下的記事本等工具直接觀察占用存儲(chǔ)空間較多而且在數(shù)據(jù)輸入輸出時(shí)必須進(jìn)行二進(jìn)制代碼和ASCII碼之間的轉(zhuǎn)換二進(jìn)制文件存儲(chǔ)空間的利用效率高輸入輸出時(shí)不需要進(jìn)行轉(zhuǎn)換 因而速度較快 可以節(jié)省磁盤(pán)空間和轉(zhuǎn)換時(shí)間二進(jìn)制文件不能直接識(shí)別內(nèi)存中的表示形式 不方便人們的閱讀和理解 可讀性差 8 1 文件概念 文件的分類(lèi)文件的處理方式數(shù)據(jù)寫(xiě)入文件或從文件中讀出數(shù)據(jù)的過(guò)程 9 1 文件概念 文件的分類(lèi)文件的處理方式 寫(xiě)文件 將保存在內(nèi)存中的數(shù)據(jù)寫(xiě)入磁盤(pán)首先要建立一個(gè) 輸出文件緩沖區(qū) 通過(guò)該緩沖區(qū)可將內(nèi)存中的數(shù)據(jù)存入磁盤(pán) 以文件的形式保存 讀文件 將保存在文件中的數(shù)據(jù)裝入內(nèi)存首先要建立一個(gè) 輸入文件緩沖區(qū) 將文件中的數(shù)據(jù)裝入緩沖區(qū)然后再由緩沖區(qū)存入程序可以操作的內(nèi)存數(shù)據(jù)區(qū) 10 1 文件概念 文件的分類(lèi)文件的處理方式C語(yǔ)言系統(tǒng)對(duì) 緩沖區(qū) 的處理方式不同產(chǎn)生了兩種不同的文件處理方式緩沖文件系統(tǒng)對(duì)每個(gè)正在使用的文件 系統(tǒng)自動(dòng)地在內(nèi)存中為其開(kāi)辟一個(gè)緩沖區(qū)非緩沖文件系統(tǒng)指系統(tǒng)不會(huì)自動(dòng)開(kāi)辟緩沖區(qū) 而要由程序自行設(shè)置文件的緩沖區(qū)提示在ANSIC83標(biāo)準(zhǔn)中取消了非緩沖文件系統(tǒng)對(duì)文本文件和二進(jìn)制文件均統(tǒng)一采用緩沖文件系統(tǒng)進(jìn)行處理 11 1 文件概念 文件的分類(lèi)文件的處理方式緩沖文件的特點(diǎn)緩沖區(qū)是一個(gè)連接計(jì)算機(jī)內(nèi)存數(shù)據(jù)與外存文件的橋梁在內(nèi)存開(kāi)辟一個(gè) 緩沖區(qū) 為程序中的每一個(gè)文件使用執(zhí)行讀文件的操作時(shí) 從磁盤(pán)文件將數(shù)據(jù)先讀如內(nèi)存 緩沖區(qū) 裝滿(mǎn)后再?gòu)膬?nèi)存 緩沖區(qū) 依此讀入進(jìn)接收的變量執(zhí)行寫(xiě)文件的操作時(shí) 先將數(shù)據(jù)寫(xiě)入內(nèi)存 緩沖區(qū) 待內(nèi)存 緩沖區(qū) 寫(xiě)滿(mǎn)后再寫(xiě)入文件由此可見(jiàn) 內(nèi)存 緩沖區(qū) 的大小 影響著實(shí)際操作外存的次數(shù) 內(nèi)存 緩沖區(qū) 越大 操作外存的次數(shù)越少 執(zhí)行速度就越快 效率就越高一般來(lái)說(shuō) 文件的 緩沖區(qū) 的大小隨機(jī)器而定 12 2 文件的操作 語(yǔ)言中文件的操作主要是由 語(yǔ)言庫(kù)函數(shù)實(shí)現(xiàn)了解和掌握 語(yǔ)言提供的與文件有關(guān)的操作和規(guī)定文件的定義文件的狀態(tài)訪問(wèn)文件的基本操作文件操作的函數(shù)屬于 語(yǔ)言標(biāo)準(zhǔn)輸入輸出庫(kù)中的函數(shù)應(yīng)在程序函數(shù)的前面使用預(yù)處理命令 include include 13 2 文件的操作 文件指針每個(gè)正在使用的文件都要說(shuō)明一個(gè)FILE類(lèi)型的結(jié)構(gòu)變量該類(lèi)型就是文件讀寫(xiě)所需要分配的內(nèi)存區(qū)域的類(lèi)型利用一個(gè)結(jié)構(gòu)體類(lèi)型的變量存放該結(jié)構(gòu)變量用于存放文件的有關(guān)信息文件的名字 文件的性質(zhì) 文件的當(dāng)前狀態(tài)等FILE類(lèi)型由系統(tǒng)定義它包含的成員即FILE的各個(gè)分量由操作系統(tǒng)自動(dòng)定義在頭文件stdio h中定義通過(guò)文件結(jié)構(gòu)的數(shù)據(jù)集合進(jìn)行輸入輸出處理文件結(jié)構(gòu)在打開(kāi)文件時(shí)由操作系統(tǒng)自動(dòng)建立 14 2 文件的操作 文件指針在頭文件stdio h中定義的結(jié)構(gòu)FILE typedefstruct shortlevel 文件的緩沖區(qū)級(jí)別 滿(mǎn)或空的程度 unsignedflag 文件狀態(tài)標(biāo)志 charfd 文件號(hào) intcleft 緩沖區(qū)的剩余字符 剩余空間 intmode 文件的操作模式 shortsize 緩沖區(qū)大小 char buffer 文件緩沖區(qū)的地址 位置 char curp 當(dāng)前地址指針 下一個(gè)字符的位置 shorttoken 有效性檢查控制單元 FILE 15 2 文件的操作 文件聲明定義文件類(lèi)型之后才能用其聲明若干個(gè)FILE類(lèi)型的變量存放文件的信息在 程序中 凡是要對(duì)已打開(kāi)文件進(jìn)行操作 都要通過(guò)指向該文件結(jié)構(gòu)的指針定義FILE型 文件型 的指針變量通過(guò)文件指針變量找到與它相關(guān)的文件如果需要同時(shí)處理n個(gè)文件 一般需要說(shuō)明n個(gè)指針變量使它們分別指向n個(gè)不同的文件 以實(shí)現(xiàn)對(duì)文件的訪問(wèn)我們只需要定義文件類(lèi)型的指針通過(guò)這個(gè)指針 程序與操作系統(tǒng)之間交流信息 使用文件 16 2 文件的操作 文件聲明格式說(shuō)明FILE是文件結(jié)構(gòu)的類(lèi)型名 標(biāo)識(shí)結(jié)構(gòu)類(lèi)型文件型指針是指向文件結(jié)構(gòu)的指針例如 FILE p p是一指向文件結(jié)構(gòu)的指針變量 提示 語(yǔ)言中標(biāo)準(zhǔn)設(shè)備文件是由系統(tǒng)控制的它們由系統(tǒng)自動(dòng)打開(kāi)和關(guān)閉用戶(hù)在程序中可以直接使用 無(wú)需再進(jìn)行說(shuō)明 語(yǔ)言中提供了三個(gè)標(biāo)準(zhǔn)設(shè)備文件的指針stdin標(biāo)準(zhǔn)輸入文件 鍵盤(pán) stdout標(biāo)準(zhǔn)輸出文件 顯示器 stderr標(biāo)準(zhǔn)錯(cuò)誤輸出文件 顯示器 FILE 文件型指針名 17 2 文件的操作 文件的操作過(guò)程打開(kāi)文件建立用戶(hù)程序與文件的聯(lián)系系統(tǒng)為文件開(kāi)辟文件緩沖區(qū)操作文件對(duì)文件的讀 寫(xiě) 追加和定位操作讀操作 從文件中讀出數(shù)據(jù)寫(xiě)操作 向文件中寫(xiě)入數(shù)據(jù)其他操作關(guān)閉文件切斷文件與程序的聯(lián)系 將文件緩沖區(qū)的內(nèi)容寫(xiě)入磁盤(pán) 并釋放文件緩沖區(qū) 18 2 文件的操作 打開(kāi)文件操作系統(tǒng)分配一塊內(nèi)存區(qū)域可以在這個(gè)區(qū)域上對(duì)文件進(jìn)行讀寫(xiě)操作將該文件的基本狀態(tài)信息裝入內(nèi)存的該區(qū)域?yàn)榱嗽诤竺鎸?duì)文件內(nèi)容讀寫(xiě)是能夠找到這個(gè)內(nèi)存區(qū)域 需要將這個(gè)內(nèi)存區(qū)域的起始指針賦值給定義的FILE類(lèi)型指針變量目的在程序與操作系統(tǒng)之間建立一種關(guān)聯(lián)通過(guò)打開(kāi)文件 程序把所要操作文件的要求 如要打開(kāi)的文件名 文件的操作方式 讀 寫(xiě) 等通知操作系統(tǒng) 19 2 文件的操作 打開(kāi)文件fopen函數(shù)的調(diào)用形式說(shuō)明FILE是前面介紹的文件類(lèi)型fp是一個(gè)指向FILE類(lèi)型的指針變量指向被打開(kāi)的文件filename文件名所要打開(kāi)的文件名稱(chēng)mode文件使用方式 表11 1 11 2 用具有特定含義的符號(hào)表示 FILE fp fp fopen char filename char mode 20 2 文件的操作 打開(kāi)文件fopen函數(shù)的功能以mode方式打開(kāi)由文件名filename指定的文件該函數(shù)的返回值為指針類(lèi)型若文件打開(kāi)成功返回一個(gè)指向該文件的指針若文件打開(kāi)失敗返回一個(gè)空指針NULL 21 例 打開(kāi)文件的正確方法是 include stdio h include stdlib h exit 0 使用此頭函數(shù)FILE fp fp fopen stu dat w 以寫(xiě)方式打開(kāi)當(dāng)前目錄下的stu dat文件并將返回的指向stu dat文件的文件指針賦給文件類(lèi)型指針變量fp if fp NULL printf cannotopenfile n exit 0 2 文件的操作 22 例 以寫(xiě)方式打開(kāi)一個(gè)readme txt文件 include stdio h voidmain FILE fp fp fopen readme txt w if fp NULL printf filenotfound fclose fp elseprintf fileopenedok 可以在fopen打開(kāi)文件時(shí)檢查函數(shù)的返回值是否為NULL以確定文件是否真正打開(kāi) 若文件打開(kāi)失敗 還使用讀寫(xiě)函數(shù)對(duì)文件進(jìn)行讀寫(xiě)操作將會(huì)出現(xiàn)錯(cuò)誤 2 文件的操作 23 也可以寫(xiě)成下面這種方式 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è)庫(kù)函數(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)對(duì)文件操作結(jié)束后 程序要通知操作系統(tǒng)文件使用完畢關(guān)閉該文件意味著釋放文件指針以供別的程序使用可以避免文件中數(shù)據(jù)的丟失否則容易導(dǎo)致對(duì)文件的誤操作尤其是剛對(duì)文件進(jìn)行寫(xiě)操作 如不關(guān)閉文件 可能會(huì)丟失剛剛寫(xiě)入的數(shù)據(jù)關(guān)閉文件采用C庫(kù)函數(shù)fclose 25 2 文件的操作 文件的關(guān)閉fclose函數(shù)的調(diào)用形式說(shuō)明文件指針是通過(guò)fopen打開(kāi)的文件fclose函數(shù)關(guān)閉fopen打開(kāi)的文件fclose函數(shù)返回值返回值為整型正常關(guān)閉時(shí)返回為0 否則返回為非0數(shù) 表示關(guān)閉出錯(cuò)函數(shù)的功能關(guān)閉由文件指針指定的文件切斷緩沖區(qū)與該文件的聯(lián)系釋放文件指針 fclose 文件指針 26 例 以讀方式打開(kāi)一個(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 文件的讀寫(xiě)是整個(gè)文件操作的核心 也是最靈活多變的部分 針對(duì)文本文件和二進(jìn)制文件的不同性質(zhì)進(jìn)行分類(lèi)操作 對(duì)文本文件可按字符讀寫(xiě)或按字符串讀寫(xiě) 對(duì)二進(jìn)制文件可按成塊讀寫(xiě)或格式化讀寫(xiě) 各種C語(yǔ)言編譯系統(tǒng)都提供了豐富的文件讀寫(xiě)函數(shù) 有一些庫(kù)函數(shù)事實(shí)上已成為標(biāo)準(zhǔn) 讀寫(xiě)字符C提供fgetc和fputc函數(shù)對(duì)文本文件進(jìn)行字符的讀寫(xiě) 函數(shù)定義格式 fgetc和fputc fgetc函數(shù)從輸入流的當(dāng)前位置返回一個(gè)字符 并將文件指針指示器移到下一個(gè)字符處 如果已經(jīng)到文件尾部 函數(shù)返回EOF 此時(shí)表示本次操作結(jié)束 fputc函數(shù)完成將字符的值寫(xiě)入所指定的流文件的當(dāng)前位置處 并將文件指針后移一位 該函數(shù)的返回值是所寫(xiě)入字符的值 出錯(cuò)時(shí)返回EOF 2 文件的操作 28 讀寫(xiě)字符串fgets 函數(shù)從文件中讀取至多num 1個(gè)字符 并將其放入str指向的數(shù)組中 函數(shù)形式為 char fgets char str intnum FILE STREAM fputs 函數(shù)將str指向的字符串寫(xiě)入文件 操作成功時(shí) 函數(shù)返回值為0值 失敗時(shí)返回非0值 函數(shù)形式為 intfputs char str FIILE stream 例 從一個(gè)文本文件中test1 txt中讀出字符串 再寫(xiě)入另一個(gè)文件test2 txt中 include include 29 include stdio h main FILE fp charc fp fopen test txt w 以寫(xiě)的方式打開(kāi)文件 if fp NULL printf Filedoesn texist n exit 0 while c fgetchar n 只要輸入字符為非空格符 fputc c fp 寫(xiě)入文件一個(gè)字符 fclose fp 例 從鍵盤(pán)輸入字符存儲(chǔ)在磁盤(pán)文件test txt中 30 例11 5 使用fputs 與fgets 函數(shù) 功能 將指定數(shù)組的字符串寫(xiě)入文本文件中 并讀到另一個(gè)指定數(shù)組中 首先 在c盤(pán)根目錄下用記事本創(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 各科成績(jī)及總成績(jī)charname 20 姓名inti if fp fopen c student dat w NULL printf openfale exit 0 printf 姓名 t英語(yǔ) t數(shù)學(xué) t計(jì)算機(jī) n for i 0 i 1 i print

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論