




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章檔案處理 9 1檔案處理的概念 9 1檔案處理的概念 檔案處理在電腦裡的概念就是在處理檔案I O Input Output 也就是檔案的輸入與輸出檔案輸入看成為讀取檔案 read 檔案輸出看成為寫入檔案 write 9 1 1資料流的概念 資料流的概念是將檔案看做是一連串的位元組 byte 排列起來資料對檔案的寫入或讀出就是對資料流的寫入與讀出 9 1 1資料流的概念 有關檔案處理方面的標準函式皆宣告在stdio h中 使用時必須將它include進來才能使用 9 1 2檔案自定型態結構FILE 對某個檔案進行I O處理時 皆須以FILE型態宣告一個檔案指標來處理 typedefstruct iobuf char ptr int cnt char base int flag int file int charbuf int bufsiz char tmpfname FILE FILE的原型宣告 9 1 2檔案自定型態結構FILE 檔案被開啟後將以一個FILE型態的指標作為操作控制者 它就是一個指向這個檔案處理的相關資訊的指標宣告舉例 FILE fhandler 此操作控制者就是該檔案的 代表 9 1 3檔案資料緩衝區 檔案一旦被開啟後 系統將配置一塊記憶體當作檔案資料存取的緩衝區緩衝區 buffer 讓檔案的部分資料先讀取到此區中 一旦需要存取資料時 先到此區中尋找或暫時的寫入如果緩衝區中找不到要讀取的資料 或者寫入的資料已經滿了 超過緩衝區的大小 則系統才會到磁碟機中的磁碟片尋找或真正的寫入檔案中 9 1 3檔案資料緩衝區 9 2檔案處理函式 9 2檔案處理函式 C函式庫中提供的檔案處理函式都宣告在stdio h檔 9 2 1檔案的開啟fopen 函式原型 FILE fopen constchar filename constchar mode 表頭檔 功能 開啟檔案 傳回值 檔案結構指標FILE 若開啟失敗則傳回NULL mode 檔案開啟的模式字串 這是一個字串常數 不同的字元代表不同的意義 開啟的檔案模式也不同 mode字元的意義 mode字元的意義 上述三種字元也可以搭配 b 和 t 三個字元而有不同的開啟檔案模式 表示可讓檔案同時供讀取和寫入 稱為修改模式 b 開啟檔案為二進位檔案 binaryfile t 開啟檔案為文字檔 textfile 可省略不寫 範例09 02 01 C 01 Programname 09 02 01 c02 include03 include04intmain 05 06FILE fp fopen 09 02 01 txt w 開啟檔案07chars1 HappyBirthdaytoyou 08chars2 50 09inti 0 10fputs s1 fp 將字串寫入檔案11fclose fp 關閉檔案12fp fopen 09 02 01 txt r 開啟檔案13fgets s2 50 fp 從檔案讀取字串到s214printf Thestringinfile09 02 01 txtis n s n s2 15fclose fp 關閉檔案16system PAUSE 17return0 18 9 2 2檔案的關閉fclose 函式原型 intfclose FILE stream 表頭檔 參數說明 stream 欲關閉檔案的資料流指標 功能 關閉檔案 傳回值 檔案關閉成功則傳回0 失敗則傳回EOF EOF是一個巨集 其定義值為 1 9 2 3讀寫檔案單一字元fgetc和fputc 函式原型 intfgetc FILE stream 表頭檔 參數說明 stream 欲讀取資料的檔案資料流指標 功能 從檔案中讀取一個字元 傳回值 讀取成功時傳回所讀取字元的ASCII碼 以整數型態傳回之 若已經讀取到檔案結束標記EOF或讀取失敗將傳回EOF 值為 1 範例09 02 03 01 Programname 09 02 03 c02 include03 include04intmain 05 06FILE f fopen testtext txt r 07intcount 0 08charc 09while c fgetc f EOF 10 11printf c c 12count 13 14printf nThereare dcharactersinthisfile count 15fclose f 16system pause 17return0 18 函式原型 intfputc intc FILE stream 表頭檔 參數說明 stream 欲讀取資料的檔案資料流指標 c 欲寫入的字元 功能 寫入一個字元到檔案資料流 傳回值 寫入成功時傳回所寫入字元的ASCII碼 以整數型態傳回之 若寫入失敗則傳回EOF 值為 1 範例09 02 03B 01 Programname 09 02 03B c02 include03 include04intmain 05 06FILE fp1 fopen fputctest txt w fp2 07chars Thisisateststringforfputcfunction 08inti 0 09charc 10 寫入字元到檔案資料流 11while s i 0 12 13fputc s i fp1 14i 15 範例09 02 03B 16fclose fp1 17 從檔案資料流讀取字元 18fp2 fopen fputctest txt r 19i 0 20c fgetc fp2 21while c EOF 22 23printf c c 24c fgetc fp2 25 26system PAUSE 27return0 28 範例09 02 03C 設計一個可以複製檔案的程式 使用者輸入欲複製的檔案名稱 來源檔案名稱 以及複製後新的檔案名稱 目的檔案名稱 程式便可運作 範例09 02 03C 01 Programname 09 02 03C c02 include03 include04intmain 05 06FILE fs fd 07charsfilename 20 dfilename 20 08charc 09printf 請輸入來源檔案名稱 10scanf s sfilename 11printf 請輸入目的檔案名稱 12scanf s dfilename 13if fs fopen sfilename r NULL 14 15printf 來源檔案無法開啟 16system pause 17return0 範例09 02 03C 18 19if fd fopen dfilename w NULL 20 21printf 目的檔案無法開啟 22system pause 23return0 24 25while c fgetc fs EOF 26fputc c fd 27fclose fs 28fclose fd 29printf 拷貝完成 30system PAUSE 31return0 32 9 2 4讀寫檔案字串fgets和fputs 函式原型 char fgets char string intn FILE stream 表頭檔 參數說明 string 讀取字串後欲存放的位置 通常是一個字元陣列變數 或者是字串變數 n 最大讀取的字元數 stream 欲讀取資料的檔案資料流指標 功能 從檔案資料流讀取字串 fgets將從目前檔案資料流指標所在位置開始讀取n 1個字元 因為要保留最後一個字元寫入字串結尾標記 0 若在過程中讀取到newline字元 也就是換行字元 n 則將停止讀取 傳回值 函式將傳回所讀取到的字串指標 並將字串儲存在string中 若讀到檔尾 則會傳回NULL 範例09 02 03C 01 Programname 09 02 03C c02 include03 include04intmain 05 06FILE fp fopen testtext txt r 07intn 50 i 08chars 100 09for i 0 i 3 i 10 11fgets s n fp 12printf s s 13 14fclose fp 15system pause 16return0 17 函式原型 intfputs constchar string FILE stream 表頭檔 參數說明 string 讀取字串後欲存放的位置 通常是一個字元陣列變數 或者是字串變數 stream 欲讀取資料的檔案資料流指標 功能 寫入一個字串到檔案資料流 傳回值 寫入正確的話會傳回非負整數 通常是0 若寫入錯誤則傳回EOF 範例 01 include02 include03intmain 04 05FILE fp fopen fputstest txt w 06chars Thisistheteststringforfputs 07fputs s fp 08fclose fp 09system pause 10return0 11 9 2 5依格式讀寫檔案資料fprintf和fscanf 函式原型 intfprintf FILE stream constchar format argument 表頭檔 參數說明 stream 欲輸出資料的檔案資料流指標 format 和printf相同的格式字串與相對應的資料儲存位址 請參考第六章6 4 4小節的介紹 功能 依照格式輸出資料到檔案資料流 傳回值 寫入正確的話會傳輸出 寫入 到檔案資料流的byte數 若寫入錯誤則傳回一個負數 範例09 02 05A 01 Programname 09 02 05A c02 include03 include04intmain 05 06inti 120 07floatf 3 14f 08unsignedui 91001 09chars HappyBirthday 10FILE fp fopen fprintftest txt w 11fprintf fp int d n i 儲存整數格式資料12fprintf fp float f n f 儲存浮點數格式資料13fprintf fp unsigned d n ui 儲存無符整數格式資料14fprintf fp string s n s 儲存字串資料15fclose fp 16system pause 17return0 18 函式原型 intfscanf FILE stream constchar format argument 表頭檔 參數說明 stream 欲讀取資料的檔案資料流指標 format 和scanf相同的格式字串與相對應的資料儲存位址 請參考第六章6 4 4小節的介紹 功能 依照格式從檔案資料流stream格式化讀取到argument中 傳回值 若能正確地從檔案資料流中讀取到資料 會傳回有多少argument被指定資料 若傳回值為0則表示沒有任何資料被指定到argument中 若讀取失敗則傳回EOF 範例09 02 05B 01 Programname 09 02 05B c02 include03 include04intmain 05 06inti 07floatf 08unsignedui 09chars 15 10FILE fp fopen fprintftest txt r 11fscanf fp int d n 22 9 3循序檔與隨機檔 9 3循序檔與隨機檔 循序檔 9 3循序檔與隨機檔 隨機檔 9 3 1認識循序檔與隨機檔 循序檔的儲存方式是將資料一筆接著一筆存放 每一筆的大小可以不相同讀取時 必須注意當時存放的順序 資料型態和大小 以便順利將每一筆資料分別取出 9 3 1認識循序檔與隨機檔 隨機檔的每項資料的長度大小都是固定的 若有資料超過這個長度 則資料有可能會被覆蓋遺失存取資料時 可以直接透過運算直接將指標移到該處 9 3 2檔案位置指標 C語言為了提供隨機檔的存取機制 在檔案結構FILE中提供了檔案位置指標 ptr記錄目前檔案讀寫的位置移動此指標到檔案資料流中適當的位置 再透過fputc fputs fgetc和fgets從這個位置開始存取 fseek 函式原型 intfseek FILE stream longoffset intorigin 表頭檔 參數說明 stream 欲讀取資料的檔案資料流指標 offset 從origin開始偏移的位元數 bytes origin 指標位址計算的起始參考位置 包括下列三個位置巨集值 SEEK CUR 目前檔案指標所在位置 SEEK END 檔案結尾 SEEK SET 檔案開頭 功能 移動檔案指標至特定的位置 傳回值 若移動指標成功則傳回0 否則傳回一個非0的值 範例09 03 02 01 Programname 09 03 02 c02 include03 include04intmain 05 06charstr Thisisateststring 07charsubstr 10 用來儲存讀取到的部分字串08FILE fp fopen test txt w 開啟檔案供寫入字串09fputs str fp 將字串str寫入檔案10fclose fp 關閉檔案1112fp fopen test txt r 開啟檔案以供讀取13fseek fp 10 SEEK SET 將指標從檔案開頭往後移動10位元14fgets substr 5 fp 從檔案指標現在的位置讀取5個字元15printf Thesub stringis s n substr 16fclose fp 關閉檔案17system pause 18return0 19 9 4二進位檔 文字檔 被儲存在文字檔中的資料都是可以 看得見 的字元 可透過文字編輯器開啟而看到內容文字檔在儲存換行字元 n 時 儲存兩個碼 一個是0 x0d 另一個是0 x0a所有文字檔的存取動作在遇到 n 時都會自動轉換成0 x0d和0 x0a 二進位檔 二進位檔不會像文字檔一樣做換行字元的轉換 而是直接存入或讀取出檔案的內容儲存的資料並不完全能 看得見 儲存數值資料時 在文字檔和二進位檔的儲存內容就不一樣 二進位檔 二進位檔 9 4 1二進位檔的開啟 使用fopen函式來開啟 在開啟模式的字串中 必須加上 b 字元 開啟二進位檔test1 bin供寫入FILE fp1 fopen test1 bin wb 開啟二進位檔test2 bin供讀取FILE fp2 fopen test2 bin rb 開啟二進位檔test3 bin供增添FILE fp3 fopen test3 bin ab 9 4 2二進位檔的讀寫fread和fwrite fwrite 函式原型 size tfwrite constvoid buffer size tsize size tcount FILE stream 表頭檔 參數說明 buffer 欲寫入資料的位址 size 寫入資料的大小 count 寫入次數 或寫入的項目數 stream 欲寫入資料的檔案資料流指標 功能 fwrite函式可將大小為size 單位是byte 的資料 寫入到檔案資料流stream中count次 傳回值 傳回寫入的項目次數 fread 函式原型 size tfread void buffer size tsize size tcount FILE stream 表頭檔 參數說明 buffer 讀取後資料存放的位址 size 讀取資料的大小 count 讀取次數 或讀取的項目數 stream 欲讀取資料的檔案資料流指標 功能 fread的動作和fwrite相反 fread函式可從檔案資料流stream中讀取將大小為size 單位是byte 的資料count次 傳回值 傳回讀取到的項目次數 範例09 04 02A 01 Programname 09 04 02A c02 include03 include04intmain 05 06charperson1 5 8 項少龍 秦清 烏廷芳 嫪毐 秦始皇 07charperson2 5 8 08inti 09FILE fp fopen array bin wb 10fwrite person1 8 5 fp 11fclose fp 1213fp fopen array bin rb 14fread person2 8 5 fp 15for i 0 i 5 i 16printf s n person2 i 17fclose fp 18system PAUSE 19return0 20 範例09 04 02B 設計一個可以儲存學生資料的結構 並事先給定3個學生的初值 將這些資料以二進位檔的方式儲存 檔名為struct bin 接著再開啟這個檔案 讀取當中的資料 並列印在螢幕上 學生結構 structSTUDENT longid 學號charname 20 姓名shortage 年齡floatheight 身高floatweight 體重 初值設定可自行決定 範例09 04 02B 01 Programname 09 04 02B c02 include03 include04str
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 园林行业:新质生产力的指向
- 2025年耳鼻喉疾病诊断治疗实践考核答案及解析
- 安全生产包含讲解
- 2025年神经外科手术技巧实践考试卷答案及解析
- 2025年核医学技术应用实验操作考核答案及解析
- 2025年病理生理学病理生理指标异常解读综合考试答案及解析
- 2025年生殖医学试管婴儿辅助生殖知识模拟考试答案及解析
- 和谐医护关系价值
- 技术是新质生产力的支点
- 新质生产力50强上市公司
- 人类基因组计划
- 【课程思政优秀案例】《创新创业实践》课程
- 阿里巴巴一达通服务
- 2018年黑龙江成人高考专升本艺术概论真题(含答案)
- 《人才池 人才培育的靶心战略》读书笔记思维导图
- DB11∕T 1789-2020 餐饮服务单位餐饮服务场所布局设置规范
- EP 中文的课件资料
- 碳纤维材料工程检验批质量验收记录表优质资料
- GB/T 95-2002平垫圈C级
- GB/T 5907.4-2015消防词汇第4部分:火灾调查
- GB 31701-2015婴幼儿及儿童纺织产品安全技术规范
评论
0/150
提交评论