《《IO流與文件系統(tǒng)》PPT課件.ppt》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《《IO流與文件系統(tǒng)》PPT課件.ppt(19頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第十一章 IO流與文件系統(tǒng),丘志杰 電子科技大學(xué) 計(jì)算機(jī)學(xué)院 軟件學(xué)院,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,2,,I/O系統(tǒng)的作用,I/O系統(tǒng)為程序與I/O設(shè)備之間進(jìn)行數(shù)據(jù)交互提供了途徑。,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,3,C++為何有自己的I/O系統(tǒng),C語(yǔ)言的標(biāo)準(zhǔn)輸入輸出函數(shù)和只能處理基本數(shù)據(jù)類(lèi)型,對(duì)用戶(hù)自定義類(lèi)型無(wú)能為力。 C++可以重載輸入輸出運(yùn)算符,能夠處理用戶(hù)自定義類(lèi)型。 C++采用繼承方式來(lái)設(shè)計(jì)流庫(kù),功能更強(qiáng)大,擴(kuò)充性更好。,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,4,C++流庫(kù)的結(jié)構(gòu),C++流庫(kù)是從繼承方法建立起來(lái)的一個(gè)輸入
2、/輸出類(lèi)庫(kù),它具有兩個(gè)平行的基類(lèi),即streambuf類(lèi)和ios類(lèi),所有其他的流類(lèi)都是從它們直接或間接地派生出來(lái)的。 streambuf類(lèi)提供對(duì)緩沖區(qū)的低級(jí)操作:,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,5,ios類(lèi)及其派生類(lèi)提供用戶(hù)使用流類(lèi)的接口:,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,6,有關(guān)頭文件和預(yù)定義流對(duì)象,包含常用流類(lèi)聲明的頭文件: iostream.h支持標(biāo)準(zhǔn)I/0操作 fstream.h 支持文件I/0操作 strstream.h 支持串I/0操作 iomanip.h支持大多數(shù)流操縱符 當(dāng)開(kāi)始執(zhí)行C++程序時(shí),有幾個(gè)自動(dòng)打開(kāi)的預(yù)定義流: cin標(biāo)準(zhǔn)
3、輸入 cout標(biāo)準(zhǔn)輸出 cerr不帶緩沖標(biāo)準(zhǔn)出錯(cuò)信息輸出 clog帶緩沖標(biāo)準(zhǔn)出錯(cuò)信息輸出,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,7,輸入和輸出,istream和ostream是用戶(hù)使用流庫(kù)的主要界面之一。 istream提供了主要的輸入操作,可以通過(guò)istream完成如下操作: 從輸入流中獲取單個(gè)字符。 從輸入流中獲取一行數(shù)據(jù)。 從輸入流中獲取指定字節(jié)數(shù)的數(shù)據(jù)。 將文件指針移動(dòng)到指定位置,等等。,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,8,ostream提供了主要的輸出操作,可以通過(guò)ostream完成如下操作: 刷新輸出流。 向輸出流中寫(xiě)入指定字節(jié)數(shù)的數(shù)據(jù)。 將文
4、件指針移動(dòng)到指定位置,等等。 istream和ostream分別重載了和<<兩個(gè)運(yùn)算符,用戶(hù)可以很方便地使用這兩個(gè)運(yùn)算符對(duì)預(yù)定義類(lèi)型進(jìn)行輸入和輸出。用戶(hù)也可以重載這兩個(gè)運(yùn)算符,從而能夠輸入和輸出自定義類(lèi)的對(duì)象。,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,9,格式控制,C++提供了兩種格式控制的方法: 使用操作符 使用ios類(lèi)中實(shí)現(xiàn)格式控制的成員函數(shù),2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,10,使用操作函數(shù)控制格式,C++ I/O流庫(kù)提供了一些操作符(如下表所示),可以直接嵌入到輸入/輸出語(yǔ)句中來(lái)實(shí)現(xiàn)特殊格式的控制。,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)
5、院,11,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,12,例子,void main() int a=100; cout<
6、 設(shè)置域?qū)?、填充字符和設(shè)置精度(width、fill、precision等),2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,14,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,15,例子,void main() int a=20; double b=111.11; cout.setf(ios::showpos|ios::scientific); cout<
7、分成ASCII文件和二進(jìn)制文件兩種。 ASCII文件又稱(chēng)為文本文件,它的每一個(gè)字節(jié)放一個(gè)ASCII代碼,代表一個(gè)字符,這樣便于對(duì)字符進(jìn)行處理,也便于輸出,但占用存儲(chǔ)空間較多。 二進(jìn)制文件是把內(nèi)存的數(shù)據(jù),按其在內(nèi)存中的存儲(chǔ)形式原樣寫(xiě)到磁盤(pán)上。用二進(jìn)制形式輸出數(shù)據(jù),可節(jié)省外存空間和轉(zhuǎn)換時(shí)間,但一個(gè)字節(jié)并不對(duì)應(yīng)一個(gè)字符。一般,中間結(jié)果常用二進(jìn)制文件保存,以減少外存開(kāi)銷(xiāo)。,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,17,C++中進(jìn)行文件I/O的基本過(guò)程,在C++中,要進(jìn)行文件的I/O,必須首先創(chuàng)建一個(gè)流,然后將這個(gè)流與文件相關(guān)聯(lián),即打開(kāi)文件,此時(shí)才能進(jìn)行讀/寫(xiě)操作,完成后再關(guān)閉這個(gè)文件。,
8、2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,18,文件的打開(kāi)和關(guān)閉,C++有三種類(lèi)型的文件流:輸入文件ifstream,輸出文件流ofstream,輸入/輸出文件流fstream。這些文件流都定義在fstream.h中。 要執(zhí)行文件輸入/輸出,須做三件事: 在程序中要包含頭文件fstream.h 建立流。建立流的過(guò)程就是定義流類(lèi)的對(duì)象。 使用open()函數(shù)打開(kāi)文件,也就是使某一文件與上面的某一流相聯(lián)系。,2020/7/27,電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院,19,舉例,#include #include void main() char buf32; ifstream in; memset(buf,0,sizeof(buf)); in.open(c:test.txt,ios::in); inbuf; in.close(); ofstream out; out.open(c:test.txt,ios::out); strcat(buf,123456789); out<