面向?qū)ο蟪绦蛟O(shè)計C++第10章-文件的輸入輸出_第1頁
面向?qū)ο蟪绦蛟O(shè)計C++第10章-文件的輸入輸出_第2頁
面向?qū)ο蟪绦蛟O(shè)計C++第10章-文件的輸入輸出_第3頁
面向?qū)ο蟪绦蛟O(shè)計C++第10章-文件的輸入輸出_第4頁
面向?qū)ο蟪绦蛟O(shè)計C++第10章-文件的輸入輸出_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學(xué)習(xí)目標(biāo) 理解函數(shù)模板、類模板的概念 掌握函數(shù)模板和類模板的區(qū)別及引用 了解異常的基本概念 掌握異常處理方法10.1 C+文件的基本知識什么是模板?為什么要使用模板?編寫程序時,經(jīng)常遇到這樣的情況:若干程序單元(如函數(shù)或者類定義)中除了所處理的數(shù)據(jù)類型不同,程序代碼是一樣的。例如交換兩個變量的值,考慮到需要處理不同的數(shù)據(jù)類型,所以一般采用重載技術(shù)。10.1 C+文件的基本知識10.1.1 標(biāo)準(zhǔn)輸入和輸出從操作系統(tǒng)的角度看,每一個與主機相連的輸入輸出設(shè)備都被看做一個文件。程序的輸入指的是從輸入文件將數(shù)據(jù)傳送給程序,程序的輸出指的是從程序?qū)?shù)據(jù)傳送給輸出文件。C+的輸入與輸出主要包括以下的內(nèi)容:

2、對系統(tǒng)指定的標(biāo)準(zhǔn)設(shè)備的輸入和輸出; 以外存磁盤文件為對象進(jìn)行輸入和輸出; 對內(nèi)存指定的空間進(jìn)行輸入和輸出。輸入和輸出是數(shù)據(jù)傳送的過程,數(shù)據(jù)如流水一樣從一處流向另一處。C+形象地將此過程稱為流(stream)。10.1 C+文件的基本知識10.1.1 標(biāo)準(zhǔn)輸入和輸出C+對文件的操作是通過文件流類來實現(xiàn)的,為了使用這些文件流類,需要用#include預(yù)編譯指令將fstream.h文件包含進(jìn)來。文件流按其用途不同可分為3種:輸入流、輸出流和輸入輸出流。要在程序中使用它們,必須定義相應(yīng)的對象。10.1 C+文件的基本知識10.1.1 標(biāo)準(zhǔn)輸入和輸出表10-1 I/O流類10.1 C+文件的基本知識10

3、.1.2 文本流、二進(jìn)制流和數(shù)據(jù)文件數(shù)據(jù)文件在磁盤上有兩種存儲方式,一種是按ASCII碼存儲,稱為ASCII碼文件;一種是按二進(jìn)制碼存儲,稱為二進(jìn)制文件。文本文件:也稱ASCII碼文件。這種文件在保存時,每個字符對應(yīng)一個字節(jié),用于存儲對應(yīng)的ASCII碼。 二進(jìn)制文件:不是保存ASCII碼,而是按二進(jìn)制的編碼方式來保存文件內(nèi)容。10.1 C+文件的基本知識10.1.3 文件的處理方式C+語言沒有提供對文件進(jìn)行操作的語句,所有的文件操作都是利用C+語言編譯系統(tǒng)所提供的庫函數(shù)來實現(xiàn)。多數(shù)C+語言編譯系統(tǒng)都提供兩種文件處理方式,即“緩沖文件系統(tǒng)”和“非緩沖文件系統(tǒng)”。(1) 緩沖文件系統(tǒng)又稱為標(biāo)準(zhǔn)文件

4、系統(tǒng)或高層文件系統(tǒng),是目前常用的文件系統(tǒng)。在對文件進(jìn)行操作時,系統(tǒng)自動地為每個文件在內(nèi)存開辟一個緩沖區(qū)。10.2 文件的打開和關(guān)閉10.2.1 文件的打開1. 使用成員函數(shù)open()打開文件函數(shù)open()是ifstream、ofstream和fstream流類的成員方法,其函數(shù)原型為:void open(const char *filename,int mode,int prot=filebuf:openprot);說明(1) 第一個形參filename是要打開的文件名,可以帶絕對路徑。(2) 第二個形參mode是文件打開模式,由一些流基類ios類的成員說明,取值及含義如表10-2所示。(

5、3) 第三個形參prot是文件打開時的保戶方式,其默認(rèn)值是filebuf:openprot,表示“可共享的”,即該文件可同時被多個文件流對象打開。10.2 文件的打開和關(guān)閉10.2.1 文件的打開1. 使用成員函數(shù)open()打開文件例如,常用的文件打開方式有:ios:in/以讀方式打開文本文件ios:in|ios:out/以讀/寫方式打開文本文件ios:in|ios:binary/以讀方式打開二進(jìn)制文件ios:in|ios:nocreate /以讀方式打開文本文件,若文件不存在,則打開失敗ios:in|ios:binary|ios:nocreate/以讀方式打開二進(jìn)制文件,若文件不存在,則打

6、開失敗ios:out /以寫方式打開文本文件ios:out|ios:binary /以寫方式打開二進(jìn)制文件ios:out|ios:app /以追加方式打開文本文件ios:out|ios:app|ios:binary /以追加方式打開二進(jìn)制文件ios:out|ios:noreplace /以寫方式打開文本文件,若文件存在,則打開失敗ios:out|ios:binary|ios:noreplace/以寫方式打開二進(jìn)制文件,若文件存在,則打開失敗10.2 文件的打開和關(guān)閉10.2.1 文件的打開1. 使用成員函數(shù)open()打開文件表10-2 文件打開模式mode的取值10.2 文件的打開和關(guān)閉10

7、.2.1 文件的打開2使用構(gòu)造函數(shù)打開文件除了用open()函數(shù)進(jìn)行打開文件外,還可以用三個文件流類ifstream、ofstream和fstream的構(gòu)造函數(shù)在定義對象的同時打開指定文件。ifstream:ifstream(const char *filename,int Mode=ios:in,int Prot=filebuf:openprot);ofstream:ifstream(const char *filename,int Mode=ios:in,int Prot=filebuf:openprot);fstream:ifstream(const char *filename,int

8、 Mode=ios:in,int Prot=filebuf:openprot);其中,各參數(shù)的含義同成員函數(shù)open()中的參數(shù)。10.2 文件的打開和關(guān)閉10.2.2 文件關(guān)閉使用完一個文件后,應(yīng)使用close()函數(shù)及時關(guān)閉。close()函數(shù)和open()函數(shù)一樣,也是文件流類的方法。ofstream outfile(a1.dat,ios:binary);/打開文件 /其它文件處理語句outfile.close(); /關(guān)閉文件10.3 文件的讀寫10.3.1 使用流運算符讀寫文件由于流插入運算符“”都已經(jīng)在iostream中重載為能用于ostream和istream類對象的輸入和輸出,

9、而ofstream和ifstream分別是ostream和istream類的派生類,所以利用“”可實現(xiàn)對磁盤文件的讀寫。整數(shù)文件的輸入和輸出 字符串文件的輸入和輸出 10.3 文件的讀寫10.3.2 使用流的成員函數(shù)讀寫文件istream流類定義了一些成員函數(shù),用來實現(xiàn)輸入的基本功能。而ostream流類定義了一些成員函數(shù),用來實現(xiàn)輸出的基本功能。1常用的輸入流成員函數(shù) get() /返回讀取的一個字符 get(char ch) /讀取的一個字符存儲在ch中 getline(char *str,int n, char ch); /讀取n-1個字符或遇到終止字符ch read(char *add

10、r, int size) /讀入size個字節(jié),存儲在首地址addr的空間2常用的輸出流成員函數(shù) put(char ch) /將ch中的字符寫入到輸出流中 write(char *addr, int size); /將內(nèi)存中的一塊內(nèi)容寫到輸出流中10.3 文件的讀寫10.3.3 二進(jìn)制文件的讀寫二進(jìn)制文件不同于文本文件,它可以處理各種類型的文件(包含文本文件)。二進(jìn)制文件的讀寫操作不需要做類似于文本文件的轉(zhuǎn)換,而直接是內(nèi)存和文件之間的一一映射。通常使用read()和write()成員函數(shù)來處理二進(jìn)制文件。1寫數(shù)據(jù)塊成員函數(shù)write() Write()函數(shù)的一般形式如下:write(cost

11、chr *buffer , int size);功能:將一組數(shù)據(jù)輸出到指定的磁盤文件中。說明(1)buffe用于存放輸出數(shù)據(jù)的緩沖區(qū)指針,即要寫出數(shù)據(jù)段的起始地址。(2)size是輸出的字節(jié)數(shù)。10.3 文件的讀寫10.3.3 二進(jìn)制文件的讀寫2讀數(shù)據(jù)塊成員函數(shù)read()read()函數(shù)的一般形式如下:read(char *buffer,int size);功能:從指定的文件中讀入一組數(shù)據(jù)。說明(1)buffer用于存放讀入數(shù)據(jù)的緩沖區(qū)指針,即是存放數(shù)據(jù)的起始地址。(2)size是讀入的字節(jié)數(shù)。10.4 文件的隨機讀寫表10-3 文件流指針相關(guān)的成員函數(shù)10.5 情景應(yīng)用訓(xùn)練項目10.5.1

12、 項目1:C+源文件的編譯預(yù)處理 【問題描述】編寫程序完成一種編譯預(yù)處理工作。將一個.cpp源程序文件中的注釋語句刪除。注釋語句有兩種形式:第一種為每行的“/”后面的內(nèi)容為注釋,第二種為在“/*”和“*/”之間的內(nèi)容是注釋。10.5 情景應(yīng)用訓(xùn)練項目10.5.1 項目1:C+源文件的編譯預(yù)處理 【算法設(shè)計】將程序文件a.cpp看成字符流,讀寫位置指針從字符流中掃過,舍棄注釋,將其他的字符寫入b.cpp。讀寫位置指針有兩種狀態(tài),當(dāng)指針在正常語句位置時,為狀態(tài)1;當(dāng)指針在“/*”和“*/”之間時,為狀態(tài)2。初始時,設(shè)定為狀態(tài)1。循環(huán)讀入字符,若讀入不成功,退出循環(huán);若讀入成功則做如下工作:(1) 若當(dāng)前為狀態(tài)1,則1)若當(dāng)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論