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