C語言程序設(shè)計教程第11章北京郵電大學(xué)出版社.ppt
《C語言程序設(shè)計教程第11章北京郵電大學(xué)出版社.ppt》由會員分享,可在線閱讀,更多相關(guān)《C語言程序設(shè)計教程第11章北京郵電大學(xué)出版社.ppt(28頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1 11 1文件概述11 2標(biāo)準(zhǔn)文件操作 第十一章文件 2 在程序運行時 程序本身和數(shù)據(jù)一般都存放在內(nèi)存中 當(dāng)程序運行結(jié)束后 存放在內(nèi)存中的數(shù)據(jù)被釋放 如果需要長期保存程序運行所需的原始數(shù)據(jù) 或程序運行產(chǎn)生的結(jié)果 就必須以文件形式存儲到外部存儲介質(zhì)上 一 文件與文件名文件是指存放在外部存儲介質(zhì)上的數(shù)據(jù)集合 為標(biāo)識一個文件 每個文件都必須有一個文件名 其一般結(jié)構(gòu)為 主文件名 擴展名 文件命名規(guī)則 遵循操作系統(tǒng)的約定 11 1文件概述 3 二 數(shù)據(jù)文件的存儲形式數(shù)據(jù)文件用于保存數(shù)據(jù) 其讀寫往往由應(yīng)用程序?qū)崿F(xiàn) 1 字符文件 也稱文本文件或正文文件 其數(shù)據(jù)以字符的形式出現(xiàn) 每個字符用一個ASCII代碼 占一個字節(jié) 表示 2 二進(jìn)制文件 以數(shù)據(jù)在內(nèi)存中的形式原樣存于磁盤 在TurboC中 二進(jìn)制文件中 整型數(shù)用2個字節(jié)表示 長整型用4個字節(jié)表示 實型數(shù) 浮點數(shù) 用4個字節(jié) 雙精度數(shù)用8個字節(jié)表示 4 例 十進(jìn)制整數(shù)10000 在內(nèi)存中占兩字節(jié) 其存放形式是 0010 0111 0001 0000 在二進(jìn)制文件中也按這中方式存放 占2個字節(jié) 在ASCII文件中 存放為31H 30H 30H 30H 30H 占5個字節(jié) 它們分別是1 0 0 0 0 0字母的ASCII碼 5 比較 字符文件的每1個字節(jié)存儲1個字符 因而便于對字符進(jìn)行逐個處理 但一般占用存儲空間較多 而且要花費轉(zhuǎn)換時間 二進(jìn)制與ASCII碼之間的轉(zhuǎn)換 二進(jìn)制文件是把內(nèi)存中的數(shù)據(jù) 原樣輸出到磁盤文件中 可以節(jié)省存儲空間和轉(zhuǎn)換時間 但1個字節(jié)并不對應(yīng)1個字符 不能直接輸出字符形式 6 三 標(biāo)準(zhǔn)文件與非標(biāo)準(zhǔn)文件 1 標(biāo)準(zhǔn)文件系統(tǒng) 利用緩沖區(qū)將對磁盤文件進(jìn)行操作的文件系統(tǒng)稱為緩沖 或高層 文件系統(tǒng) 用戶使用方便 從內(nèi)存向磁盤輸出數(shù)據(jù)時 必須首先輸出到緩沖區(qū)中 待緩沖區(qū)裝滿后 再一起輸出到磁盤文件中 從磁盤文件向內(nèi)存讀入數(shù)據(jù)時 則正好相反 首先將一批數(shù)據(jù)讀入到緩沖區(qū)中 再從緩沖區(qū)中將數(shù)據(jù)逐個送到程序數(shù)據(jù)區(qū) 2 非標(biāo)準(zhǔn)文件系統(tǒng) 不使用緩沖區(qū)的磁盤文件系統(tǒng)稱為非緩沖 或低層 文件系統(tǒng) 編程難度較大 但程序的執(zhí)行效率高 占用內(nèi)存資源較少 7 在C語言中 無論是使用標(biāo)準(zhǔn)文件系統(tǒng)還是非標(biāo)準(zhǔn)文件系統(tǒng) 都是利用I O庫函數(shù)完成文件操作的 8 要調(diào)用一個文件 需要有以下的信息 文件當(dāng)前的讀寫位置 與該文件對應(yīng)的內(nèi)存緩沖區(qū)的地址 文件操作方式等1 每個被使用的文件都在內(nèi)存中開辟一個區(qū) 用來存放文件的有關(guān)信息 這些信息是保存在一個結(jié)構(gòu)體類型的變量中 該結(jié)構(gòu)體類型是由系統(tǒng)定義的 取名為FILE 2 標(biāo)準(zhǔn)文件系統(tǒng)借助FILE數(shù)據(jù)結(jié)構(gòu)對文件進(jìn)行管理 利用文件指針讀寫文件 每當(dāng)程序成功打開一個文件 系統(tǒng)就在內(nèi)存建立一個與該文件對應(yīng)的FILE結(jié)構(gòu)體變量 并返回該變量的指針 地址 11 2標(biāo)準(zhǔn)文件操作 一 標(biāo)準(zhǔn)文件FILE結(jié)構(gòu)指針 9 3 在程序中定義一個指針變量 用以保存已打開文件所對應(yīng)的FILE結(jié)構(gòu)在內(nèi)存的地址 此后用戶程序就可用此FILE指針來實現(xiàn)對指定文件的存取操作 定義文件指針變量的一般形式為 FILE 文件結(jié)構(gòu)指針變量名例如 FILE fp 注意 1 只有通過文件指針 才能調(diào)用相應(yīng)的文件 2 對文件操作的庫函數(shù) 函數(shù)原型均在頭文件stdio h中 3 文件操作的過程 對磁盤文件的操作必須 先打開 再讀寫 最后關(guān)閉 10 打開 文件的含義 以某中方式從磁盤上查找指定的文件或創(chuàng)建一個新文件 1 文件的打開 fopen 函數(shù)形式 FILE fopen char filename char mode filename 文件名 可以包含驅(qū)動器 路徑 文件名 擴展名 mode 打開方式FILE 返回值1 如果成功打開 返回一個指向被打開文件的文件信息區(qū)的起始地址 2 如果打開失敗 返回一個NULL指針 二 標(biāo)準(zhǔn)文件的打開操作 11 r 只讀 為輸入打開一個文本文件 w 只寫 為輸出打開一個文本文件 a 追加 向文本文件尾增加數(shù)據(jù) rb 只讀 為輸入打開一個二進(jìn)制文件 wb 只寫 為輸出打開一個二進(jìn)制文件 ab 追加 向二進(jìn)制文件尾增加數(shù)據(jù) r 讀寫 為讀 寫打開一個文本文件 w 讀寫 為讀 寫建立一個新的文本文件 a 讀寫 為讀 寫打開一個文本文件 rb 讀寫 為讀 寫打開一個二進(jìn)制文件 wb 讀寫 為讀 寫建立一個新的二進(jìn)制文件 ab 讀寫 為讀 寫打開一個二進(jìn)制文件 2 文件打開方式參數(shù) 12 3 在程序開始運行時 系統(tǒng)自動打開以下標(biāo)準(zhǔn)文件 并自動地定義了對應(yīng)的FILE結(jié)構(gòu)指針變量 13 4 說明 1 用 r 方式打開的文件應(yīng)該已經(jīng)存在 如果不存在則打開失敗 2 用 w 方式打開的文件 如果不存在該文件 則新建立一個 如果存在該文件 則在打開時將該文件刪去 然后重新建立一個新文件 3 如果希望向文件末尾添加新的數(shù)據(jù) 不希望刪除原有數(shù)據(jù) 則應(yīng)該用 a 方式打開 4 如果不能實現(xiàn) 打開 的任務(wù) fopen函數(shù)的返回值是一個NULL空指針 其值在頭文件stdio h中被定義為 14 為增強程序的可靠性 常用下面的方法打開一個文件 if fp fopen 文件名 操作方式 NULL printf cannotopenthisfile n exit 0 關(guān)于exit 函數(shù)1 用法 voidexit 程序狀態(tài)值 2 功能 關(guān)閉已打開的所有文件 結(jié)束程序運行 返回操作系統(tǒng) 并將 程序狀態(tài)值 返回給操作系統(tǒng) 當(dāng) 程序狀態(tài)值 為 時 表示程序正常退出 非 值時 表示程序出錯退出 15 三 關(guān)閉標(biāo)準(zhǔn)文件 程序?qū)ξ募淖x寫操作完成后 必須關(guān)閉文件 以保證文件的完整性 格式 fclose 文件指針 1 fclose fp 關(guān)閉fp所指的文件 并返回一個整數(shù)值 若成功地關(guān)閉了文件 則返回一個0值 否則返回一個非零值 2 fcloseall 同時關(guān)閉程序中已打開的多個文件 標(biāo)準(zhǔn)設(shè)備文件除外 將各文件緩沖區(qū)未裝滿的內(nèi)容寫到相應(yīng)的文件中去 并釋放這些緩沖區(qū) 返回關(guān)閉文件的數(shù)目 16 四 標(biāo)準(zhǔn)文件的讀寫操作 1 字符讀寫函數(shù)fgetc和fputcintfputc intc FILE fp 把字符c寫入fp所指的文件intfgetc FILE fp 從fp所指的文件中讀一個字符 返回讀得的字符 對于文本文件 遇文件尾時返回EOF 其值在頭文件stdio h中被定義為 1 對于二進(jìn)制文件 用feof fp 判別是否遇文件尾 feof fp 1說明遇文件尾 17 例1 函數(shù)fgetc和fputc的使用 include stdio h include conio h main FILE fp1 fp2 charfile1 20 file2 20 charch clrscr printf pleaseinputfile1 sname scanf s file1 fp1 fopen file1 r 18 if fp1 NULL printf cannotopenthisfile n exit 0 printf pleaseinputfile2 sname scanf s file2 fp2 fopen file2 w if fp2 NULL printf cannotopenthisfile n exit 0 ch fgetc fp1 while ch EOF fputc ch fp2 ch fgetc fp1 fclose fp1 fclose fp2 19 2 字符串讀寫函數(shù)fgets和fputs庫函數(shù)fputs 向fp所指文件輸出一個字符串1 用法 intfputs constchar str FILE fp 2 功能 把str寫入fp所指的文件 庫函數(shù)fgets 從文件中讀一個字符串1 用法 char fgets char str intn FILE fp 2 功能 從fp所指的文件中讀n 1個字節(jié)到str str最后一個字節(jié)加 0 如果在讀入規(guī)定長度之前遇到文件尾EOF或換行符 讀入即結(jié)束 20 例2 函數(shù)fputs和fgets的使用 includemain FILE fp char ch1 Howareyou charch2 20 clrscr fp fopen d infile txt w if fp NULL printf cannotopenthisfile n exit 0 fputs ch1 fp rewind fp 用于把文件指針移到文件的開頭 fgets ch2 strlen ch 1 fp printf s ch2 21 3 格式化讀寫函數(shù)fscanf和fprintf形式 fprintf 文件指針 格式控制 變量列表 fscanf 文件指針 格式控制 變量地址列表 除增加 文件指針 外 與scanf 和printf 函數(shù)的功能相似 例如 inti 3 floatf 9 80 fprintf fp 2d 6 2f i f fprintf 函數(shù)的作用是 將變量i按 2d格式 變量f按 6 2f格式 以逗號作分隔符 輸出到fp所指向的文件中 3 9 80 表示1個空格 例3 函數(shù)fscanf和fprintf的使用 main FILE fpr fpw intj clrscr fpr fopen d creatr txt r fpw fopen d creatw txt w if fpr NULL fpw NULL printf cannotopenfile n exit 0 definenumber3 include includetypedefstruct longnum charname 10 intage student studenttest number for j 0 j number j fscanf fpr ld s d 23 intfwrite void buffer unsignedsize unsignedcount FILE fp 將buffer地址開始的信息 寫入count次 每次寫size字節(jié)至文件fp中 函數(shù)返回值等于實際寫入的次數(shù) 可能少于count typedefstruct longnum charname 10 intage student studentstu 3 for j 0 j number j fwrite stu j sizeof student 1 fp 4 讀 寫一個數(shù)據(jù)塊fread fwrite 24 intfread void buffer unsignedsize unsignedcount FILE fp 從文件fp中讀入count次 每次讀size字節(jié) 讀入的信息存在buffer指針指向的緩沖區(qū) 函數(shù)返回值等于實際讀入的次數(shù) 可能少于count typedefstruct longnum charname 10 intage student studenttest 3 作用 按數(shù)據(jù)項 即數(shù)據(jù)塊 進(jìn)行操作 通過它們可以方便地對程序中的數(shù)組 結(jié)構(gòu)體數(shù)據(jù)進(jìn)行整體輸入輸出 函數(shù)操作完成后 將返回讀出或?qū)懭氲臄?shù)據(jù)項項數(shù) for j 0 j number j fread 25 讀 寫函數(shù)的選用原則 從功能角度來說 fread 和fwrite 函數(shù)可以完成文件的任何數(shù)據(jù)讀 寫操作 但為方便起見 依下列原則選用 1 讀 寫1個字符 或字節(jié) 數(shù)據(jù)時 選用fgetc 和fputc 函數(shù) 2 讀 寫1個字符串時 選用fgets 和fputs 函數(shù) 3 整體讀 寫結(jié)構(gòu)體或數(shù)組時 選用fread 和fwrite 函數(shù) 4 讀 寫1個 或多個 含格式的數(shù)據(jù)時 選用fscanf 和fprintf 函數(shù) 26 文件的操作步驟 1 定義文件指針 FILE 2 建立文件指針和文件名的關(guān)系 fopen 3 進(jìn)行讀或?qū)懖僮?4 關(guān)閉文件 fclose 例如 要將文本文件1中字符復(fù)制到文件2中 定義內(nèi)存變量ch和兩個文件指針fp1和fp2 反復(fù)執(zhí)行ch fgetc fp1 和fputc ch fp2 語句直到feof fp1 為真止 27 文件中有一個位置指針 指向當(dāng)前讀寫的位置 我們可以使用有關(guān)函數(shù)來改變其位置 以完成文件的隨機讀寫 四 標(biāo)準(zhǔn)文件的定位函數(shù) fseek 函數(shù) 調(diào)用形式為 fseek 文件類型指針 位移量 起始點 說明 位移量一般是long型數(shù)據(jù) 起始點用0 1或2表示 函數(shù)的作用 是使文件指針移動到所需的位置 若調(diào)用成功 返回值為0 否則返回一個非零值 28 例如 fseek fp 20L 0 把文件指針從文件開頭移到第20個字節(jié)處 fseek fp 20L 2 把文件指針從文件尾向前移動20個字節(jié) ftell 函數(shù) 調(diào)用形式為 ftell 文件類型指針 函數(shù)的作用 得到文件指針離開文件起點的字節(jié)數(shù) 若調(diào)用不成功 返回 1L 表示出錯 例如 longi i ftell fp if i 1L printf error n rewind 函數(shù) 調(diào)用形式為 rewind 文件類型指針 函數(shù)的作用 用于把文件指針移到文件的開頭 移動成功時 返回值為0 否則返回一個非零值- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語言程序設(shè)計 教程 11 北京郵電 大學(xué)出版社
鏈接地址:http://m.appdesigncorp.com/p-6333681.html