




已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
程序設計基礎 C語言 廣東海洋大學信息學院 程序設計基礎 C語言 文件 3 1 文件概念 什么是文件 文件是存儲在外部介質上 介質 磁盤和磁帶等外存儲器 的數(shù)據(jù)或信息的集合例如程序文件中保存著源程序數(shù)據(jù)文件中保存著數(shù)據(jù)聲音文件中保存著聲音數(shù)據(jù)磁盤上的每個文件都有唯一的名字 進行標識 依據(jù)文件名找到相應的文件為什么要使用文件文件的改動不能引起程序的改動 即程序與數(shù)據(jù)分離不同的程序可以訪問同一數(shù)據(jù)文件中的數(shù)據(jù) 即數(shù)據(jù)共享能夠長期保存程序運行的中間數(shù)據(jù)或結果數(shù)據(jù) 4 1 文件概念 C語言實現(xiàn)文件操作通過操作系統(tǒng)完成對文件的輸入輸出操作通過由C語言的編譯系統(tǒng)提供的一套用于文件操作的庫函數(shù) 也稱為 標準輸入 輸出庫 文件的特點文件是一個有序的數(shù)據(jù)序列保存的所有數(shù)據(jù)有著嚴格的排列次序 類似于數(shù)組 要訪問文件中的數(shù)據(jù) 必須按照它們的排列順序 依次進行訪問 5 1 文件概念 文件的分類數(shù)據(jù)的組織形式ASCII碼文件 文本文件 ASCII碼文件是將要存儲的數(shù)據(jù)采用ASCII碼的形式進行存儲數(shù)據(jù)按順序組成一個一個的字符序列每一個字符用一個ASCII碼來表示 占用1個字節(jié)ASCII碼形式的文件在文本編輯器下可以直接閱讀保存在內存中的所有數(shù)據(jù)在存入文件的時候都要先轉換為等價的字符形式當要從文件中讀取數(shù)據(jù)時 在將字符串轉換為浮點數(shù)例如 123 45 浮點數(shù) 將123 45轉換為字符串 123 45 再存放 占用5個字節(jié) 6 1 文件概念 文件的分類數(shù)據(jù)的組織形式二進制文件將數(shù)據(jù)按其在內存中的存儲方式 二進制方式 原樣輸出到文件中存放的內存中的數(shù)據(jù)存入磁盤的時候不需要進行數(shù)據(jù)轉換磁盤上保存的數(shù)據(jù)采用 語言規(guī)定的與內存數(shù)據(jù)一致的表示形式進行存儲例如 123 45存放字二進制文件中將會占用4個字節(jié) 浮點數(shù) 7 1 文件概念 文件的分類數(shù)據(jù)的組織形式區(qū)別ASCII碼文件較為直觀 可讀性好方便人們的閱讀和理解可以直接在Windows下的記事本等工具直接觀察占用存儲空間較多而且在數(shù)據(jù)輸入輸出時必須進行二進制代碼和ASCII碼之間的轉換二進制文件存儲空間的利用效率高輸入輸出時不需要進行轉換 因而速度較快 可以節(jié)省磁盤空間和轉換時間二進制文件不能直接識別內存中的表示形式 不方便人們的閱讀和理解 可讀性差 8 1 文件概念 文件的分類文件的處理方式數(shù)據(jù)寫入文件或從文件中讀出數(shù)據(jù)的過程 9 1 文件概念 文件的分類文件的處理方式 寫文件 將保存在內存中的數(shù)據(jù)寫入磁盤首先要建立一個 輸出文件緩沖區(qū) 通過該緩沖區(qū)可將內存中的數(shù)據(jù)存入磁盤 以文件的形式保存 讀文件 將保存在文件中的數(shù)據(jù)裝入內存首先要建立一個 輸入文件緩沖區(qū) 將文件中的數(shù)據(jù)裝入緩沖區(qū)然后再由緩沖區(qū)存入程序可以操作的內存數(shù)據(jù)區(qū) 10 1 文件概念 文件的分類文件的處理方式C語言系統(tǒng)對 緩沖區(qū) 的處理方式不同產生了兩種不同的文件處理方式緩沖文件系統(tǒng)對每個正在使用的文件 系統(tǒng)自動地在內存中為其開辟一個緩沖區(qū)非緩沖文件系統(tǒng)指系統(tǒng)不會自動開辟緩沖區(qū) 而要由程序自行設置文件的緩沖區(qū)提示在ANSIC83標準中取消了非緩沖文件系統(tǒng)對文本文件和二進制文件均統(tǒng)一采用緩沖文件系統(tǒng)進行處理 11 1 文件概念 文件的分類文件的處理方式緩沖文件的特點緩沖區(qū)是一個連接計算機內存數(shù)據(jù)與外存文件的橋梁在內存開辟一個 緩沖區(qū) 為程序中的每一個文件使用執(zhí)行讀文件的操作時 從磁盤文件將數(shù)據(jù)先讀如內存 緩沖區(qū) 裝滿后再從內存 緩沖區(qū) 依此讀入進接收的變量執(zhí)行寫文件的操作時 先將數(shù)據(jù)寫入內存 緩沖區(qū) 待內存 緩沖區(qū) 寫滿后再寫入文件由此可見 內存 緩沖區(qū) 的大小 影響著實際操作外存的次數(shù) 內存 緩沖區(qū) 越大 操作外存的次數(shù)越少 執(zhí)行速度就越快 效率就越高一般來說 文件的 緩沖區(qū) 的大小隨機器而定 12 2 文件的操作 語言中文件的操作主要是由 語言庫函數(shù)實現(xiàn)了解和掌握 語言提供的與文件有關的操作和規(guī)定文件的定義文件的狀態(tài)訪問文件的基本操作文件操作的函數(shù)屬于 語言標準輸入輸出庫中的函數(shù)應在程序函數(shù)的前面使用預處理命令 include include 13 2 文件的操作 文件指針每個正在使用的文件都要說明一個FILE類型的結構變量該類型就是文件讀寫所需要分配的內存區(qū)域的類型利用一個結構體類型的變量存放該結構變量用于存放文件的有關信息文件的名字 文件的性質 文件的當前狀態(tài)等FILE類型由系統(tǒng)定義它包含的成員即FILE的各個分量由操作系統(tǒng)自動定義在頭文件stdio h中定義通過文件結構的數(shù)據(jù)集合進行輸入輸出處理文件結構在打開文件時由操作系統(tǒng)自動建立 14 2 文件的操作 文件指針在頭文件stdio h中定義的結構FILE typedefstruct shortlevel 文件的緩沖區(qū)級別 滿或空的程度 unsignedflag 文件狀態(tài)標志 charfd 文件號 intcleft 緩沖區(qū)的剩余字符 剩余空間 intmode 文件的操作模式 shortsize 緩沖區(qū)大小 char buffer 文件緩沖區(qū)的地址 位置 char curp 當前地址指針 下一個字符的位置 shorttoken 有效性檢查控制單元 FILE 15 2 文件的操作 文件聲明定義文件類型之后才能用其聲明若干個FILE類型的變量存放文件的信息在 程序中 凡是要對已打開文件進行操作 都要通過指向該文件結構的指針定義FILE型 文件型 的指針變量通過文件指針變量找到與它相關的文件如果需要同時處理n個文件 一般需要說明n個指針變量使它們分別指向n個不同的文件 以實現(xiàn)對文件的訪問我們只需要定義文件類型的指針通過這個指針 程序與操作系統(tǒng)之間交流信息 使用文件 16 2 文件的操作 文件聲明格式說明FILE是文件結構的類型名 標識結構類型文件型指針是指向文件結構的指針例如 FILE p p是一指向文件結構的指針變量 提示 語言中標準設備文件是由系統(tǒng)控制的它們由系統(tǒng)自動打開和關閉用戶在程序中可以直接使用 無需再進行說明 語言中提供了三個標準設備文件的指針stdin標準輸入文件 鍵盤 stdout標準輸出文件 顯示器 stderr標準錯誤輸出文件 顯示器 FILE 文件型指針名 17 2 文件的操作 文件的操作過程打開文件建立用戶程序與文件的聯(lián)系系統(tǒng)為文件開辟文件緩沖區(qū)操作文件對文件的讀 寫 追加和定位操作讀操作 從文件中讀出數(shù)據(jù)寫操作 向文件中寫入數(shù)據(jù)其他操作關閉文件切斷文件與程序的聯(lián)系 將文件緩沖區(qū)的內容寫入磁盤 并釋放文件緩沖區(qū) 18 2 文件的操作 打開文件操作系統(tǒng)分配一塊內存區(qū)域可以在這個區(qū)域上對文件進行讀寫操作將該文件的基本狀態(tài)信息裝入內存的該區(qū)域為了在后面對文件內容讀寫是能夠找到這個內存區(qū)域 需要將這個內存區(qū)域的起始指針賦值給定義的FILE類型指針變量目的在程序與操作系統(tǒng)之間建立一種關聯(lián)通過打開文件 程序把所要操作文件的要求 如要打開的文件名 文件的操作方式 讀 寫 等通知操作系統(tǒng) 19 2 文件的操作 打開文件fopen函數(shù)的調用形式說明FILE是前面介紹的文件類型fp是一個指向FILE類型的指針變量指向被打開的文件filename文件名所要打開的文件名稱mode文件使用方式 表11 1 11 2 用具有特定含義的符號表示 FILE fp fp fopen char filename char mode 20 2 文件的操作 打開文件fopen函數(shù)的功能以mode方式打開由文件名filename指定的文件該函數(shù)的返回值為指針類型若文件打開成功返回一個指向該文件的指針若文件打開失敗返回一個空指針NULL 21 例 打開文件的正確方法是 include stdio h include stdlib h exit 0 使用此頭函數(shù)FILE fp fp fopen stu dat w 以寫方式打開當前目錄下的stu dat文件并將返回的指向stu dat文件的文件指針賦給文件類型指針變量fp if fp NULL printf cannotopenfile n exit 0 2 文件的操作 22 例 以寫方式打開一個readme txt文件 include stdio h voidmain FILE fp fp fopen readme txt w if fp NULL printf filenotfound fclose fp elseprintf fileopenedok 可以在fopen打開文件時檢查函數(shù)的返回值是否為NULL以確定文件是否真正打開 若文件打開失敗 還使用讀寫函數(shù)對文件進行讀寫操作將會出現(xiàn)錯誤 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 也是一個庫函數(shù) 定義在 stdlib h 中 它起的作用是 1 關閉所有文件 2 程序正常退出 3 返回操作系統(tǒng) 4 將 0 返回操作系統(tǒng) 一般情況下 exit 0 表示在程序設計者控制的范圍內正常退出 exit 0 則表示程序非正常退出 2 文件的操作 24 2 文件的操作 文件的關閉當對文件操作結束后 程序要通知操作系統(tǒng)文件使用完畢關閉該文件意味著釋放文件指針以供別的程序使用可以避免文件中數(shù)據(jù)的丟失否則容易導致對文件的誤操作尤其是剛對文件進行寫操作 如不關閉文件 可能會丟失剛剛寫入的數(shù)據(jù)關閉文件采用C庫函數(shù)fclose 25 2 文件的操作 文件的關閉fclose函數(shù)的調用形式說明文件指針是通過fopen打開的文件fclose函數(shù)關閉fopen打開的文件fclose函數(shù)返回值返回值為整型正常關閉時返回為0 否則返回為非0數(shù) 表示關閉出錯函數(shù)的功能關閉由文件指針指定的文件切斷緩沖區(qū)與該文件的聯(lián)系釋放文件指針 fclose 文件指針 26 例 以讀方式打開一個文本文件readme txt然后關閉該文件 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 文件的讀寫是整個文件操作的核心 也是最靈活多變的部分 針對文本文件和二進制文件的不同性質進行分類操作 對文本文件可按字符讀寫或按字符串讀寫 對二進制文件可按成塊讀寫或格式化讀寫 各種C語言編譯系統(tǒng)都提供了豐富的文件讀寫函數(shù) 有一些庫函數(shù)事實上已成為標準 讀寫字符C提供fgetc和fputc函數(shù)對文本文件進行字符的讀寫 函數(shù)定義格式 fgetc和fputc fgetc函數(shù)從輸入流的當前位置返回一個字符 并將文件指針指示器移到下一個字符處 如果已經到文件尾部 函數(shù)返回EOF 此時表示本次操作結束 fputc函數(shù)完成將字符的值寫入所指定的流文件的當前位置處 并將文件指針后移一位 該函數(shù)的返回值是所寫入字符的值 出錯時返回EOF 2 文件的操作 28 讀寫字符串fgets 函數(shù)從文件中讀取至多num 1個字符 并將其放入str指向的數(shù)組中 函數(shù)形式為 char fgets char str intnum FILE STREAM fputs 函數(shù)將str指向的字符串寫入文件 操作成功時 函數(shù)返回值為0值 失敗時返回非0值 函數(shù)形式為 intfputs char str FIILE stream 例 從一個文本文件中test1 txt中讀出字符串 再寫入另一個文件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 寫入文件一個字符 fclose fp 例 從鍵盤輸入字符存儲在磁盤文件test txt中 30 例11 5 使用fputs 與fgets 函數(shù) 功能 將指定數(shù)組的字符串寫入文本文件中 并讀到另一個指定數(shù)組中 首先 在c盤根目錄下用記事本創(chuàng)建文本文件hello txt include includeintmain FILE fpfile charintext 10 hello outtext 10 if fpfile fopen c hello txt w NULL 第1個 表示轉議字符 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ù)學 t計算機 n for i 0 i 1 i print
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鉆石保值增值協(xié)議書
- 餐飲加盟平臺協(xié)議書
- 鎮(zhèn)江雙月協(xié)商協(xié)議書
- 門市轉讓手寫協(xié)議書
- 高速施工安全協(xié)議書
- 非法集資合股協(xié)議書
- 魚池防漏保修協(xié)議書
- 車位委托代售協(xié)議書
- 苗木臨時收購協(xié)議書
- 菌種大棚承包協(xié)議書
- 2024年保安員證考試題庫及答案(共240題)
- 智能化工程投標書
- 【招投標管理探究的國內外文獻綜述2600字】
- 傳感器技術-武漢大學
- 巖石破碎型泥水平衡頂管施工工法
- 新概念英語第1冊第2冊單詞帶音標
- 健康養(yǎng)老照護課程設計
- 西藏拉薩市10校2025屆高考沖刺押題(最后一卷)歷史試卷含解析
- HG∕T 3657-2017 水處理劑異噻唑啉酮衍生物
- NBT 31021-2012風力發(fā)電企業(yè)科技文件規(guī)檔規(guī)范
- 科學世界包含內容
評論
0/150
提交評論