歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

流類庫和輸入輸出(C程序設(shè)計(第2版)吳乃陵).ppt

  • 資源ID:3409954       資源大?。?span id="yvdqi5v" class="font-tahoma">160KB        全文頁數(shù):21頁
  • 資源格式: PPT        下載積分:9.9積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

流類庫和輸入輸出(C程序設(shè)計(第2版)吳乃陵).ppt

第九章流類庫和輸入/輸出,文件是存儲在磁盤、磁帶等外部設(shè)備上數(shù)據(jù)集合,每一個文件都必須有一個唯一名字。使用文件前必須首先打開文件,使用后必須關(guān)閉文件。對文件的操作時通過文件流類完成的。文件流類在流與文件之間建立連接,使用這些文件流類必須用#include編譯指令將fstream.h包含進(jìn)來。數(shù)據(jù)從一個對象到另一個對象的傳送被抽象為“流”。數(shù)據(jù)的輸入/輸出就是通過輸入/輸出流來實現(xiàn)的。流是一種抽象的概念,負(fù)責(zé)在數(shù)據(jù)的產(chǎn)生者和數(shù)據(jù)的使用者之間建立聯(lián)系,并管理數(shù)據(jù)的流動。,9.1C+的基本流類體系,流類體系:以抽象類模板ios為基類,流類模板派生體系見圖。整個流類模板體系的標(biāo)準(zhǔn)I/O在頭文件中說明,它包含頭文件、和。而輸入輸出文件流部分在頭文件中說明。,主要輸入/輸出流模板層次,9.2文件的輸入與輸出,本節(jié)中文件指的是磁盤文件。C+根據(jù)文件(file)內(nèi)容的數(shù)據(jù)格式,可分為兩類:二進(jìn)制文件和文本文件。文本文件由字符序列組成,也稱ASCII碼文件,在文本文件中存取的最小信息單位為字符(character),而二進(jìn)制文件中存取的最小信息單位為字節(jié)(Byte)。,C+把每一個文件都看成一個有序的字節(jié)流,見圖9.2,每一個文件或者以文件結(jié)束符(endoffilemarker)結(jié)束,或者在特定的字節(jié)號處結(jié)束。,文件的基本概念:,9.2文件的輸入與輸出,當(dāng)打開一個文件時,該文件就和某個流關(guān)聯(lián)起來了。對文件進(jìn)行讀寫實際上受到一個文件定位指針(filepositionpointer)的控制。輸入流的指針也稱為讀指針,每一次提取操作將從讀指針當(dāng)前所指位置開始,每次提取操作自動將讀指針向文件尾移動。輸出流指針也稱寫指針,每一次插入操作將從寫指針當(dāng)前位置開始,每次插入操作自動將寫指針向文件尾移動。,9.2.1文件的打開與關(guān)閉,9.2.2文本文件的讀寫,9.2.3二進(jìn)制文件的讀寫,9.2.4文件的隨機(jī)訪問,9.2.1文件的打開與關(guān)閉,文件使用步驟:1說明一個文件流對象,這又被稱為內(nèi)部文件:ifstreamifile;/只輸入用ofstreamofile;/只輸出用fstreamiofile;/既輸入又輸出用,2使用文件流對象的成員函數(shù)打開一個磁盤文件。這樣在文件流對象和磁盤文件名之間建立聯(lián)系。文件流中說明了三個打開文件的成員函數(shù)。voidifstream:open(constchar*,int=ios:in,int=filebuf:openprot);voidofstream:open(constchar*,int=ios:out,int=filebuf:opernprot);voidfstream:open(constchar*,int,int=filebuf:openprot);第一個參數(shù)為要打開的磁盤文件名。第二個參數(shù)為打開方式,有輸入(in),輸出(out)等,打開方式在ios基類中定義為枚舉類型。第三個參數(shù)為指定打開文件的保護(hù)方式,一般取默認(rèn)。所以第二步可如下進(jìn)行:iofile.open(“myfile.txt”,ios:in|ios:out);,文件打開方式:是由在ios類中定義的公有枚舉成員決定:enumopen_modein=0 x01,out=0 x02,ate=0 x04,app=0 x08,trunc=0 x10,binary=0 x80;,ios:in打開文件進(jìn)行讀操作ios:out打開文件進(jìn)行寫操作ios:ate打開時文件指針定位到文件尾ios:app添加模式,所有增加都在文件尾部進(jìn)行ios:trunc如果文件已經(jīng)存在則清空源文件ios:nocreate如果文件不存在則打開失敗ios:noreplace如果文件存在則打開失敗ios:binary二進(jìn)制文件(非文本文件)Mode的符號常量可以用位或運算|組合在一起,如:ios:in|ios:binary只讀方式打開二進(jìn)制文件對于ifstream流,mode默認(rèn)方式是ios;in;對于ofstream流,mode默認(rèn)方式是ios;out;,打開方式解釋:,Port決定文件的訪問方式0普通文件2隱含文件1只讀文件4系統(tǒng)文件,三個文件流類都重載了一個帶默認(rèn)參數(shù)的構(gòu)造函數(shù),功能與open函數(shù)一樣:ifstream:ifstream(constchar*,int=ios:in,int=filebuf:openprot);ofstream:ofstream(constchar*,int=ios:out,int=filebuf:openprot);fstream:fstream(constchar*,int,int=filebuf:operprot);所以1,2兩步可合成:fstreamiofile(”myfile.txt”,ios:in|ios:out);,打開文件也應(yīng)該判斷是否成功,若成功,文件流對象值為非零值,不成功為0(NULL),文件流對象值物理上就是指它的地址。因此打開一個文件完整的程序為:fstreamiofile(”myfile.txt”,ios:in|ios:out);if(!iofile)cout<<”不能打開文件:”<<”myfile.txt”<getread,Put函數(shù)該函數(shù)把一個字符寫到輸出流中。Cout<>相似,主要的不同點get函數(shù)在讀取數(shù)據(jù)時包括空白字符,而>>在默認(rèn)情況下拒絕接受空白字符。,Write函數(shù)該函數(shù)把內(nèi)存中的一塊內(nèi)容寫到一個輸出文件流中,長度參數(shù)指出寫的字節(jié)數(shù)。該函數(shù)遇到空字符時并不停止,因而能夠?qū)懭胪暾念惤Y(jié)構(gòu),該函數(shù)帶2個參數(shù),一個char型指針(指向內(nèi)存數(shù)據(jù)的起始地址)和一個所寫的字節(jié)數(shù)。注意在該結(jié)構(gòu)的對象地址之前要char做強(qiáng)制類型轉(zhuǎn)換。,read函數(shù)該函數(shù)從一個文件讀字節(jié)到一個指定的存儲器區(qū)域,由長度參數(shù)確定要讀的字節(jié)數(shù)。雖然給出長度參數(shù),但當(dāng)遇到文件結(jié)束或者在文本模式文件中遇到文件結(jié)束標(biāo)記時讀結(jié)束。,關(guān)閉文件。三個文件流類各有一個關(guān)閉文件的成員函數(shù):voidifstream:close();voidofstream:close();voidfstream:close();使用很方便,如:iofile.close();,關(guān)閉文件時,系統(tǒng)把該文件相關(guān)聯(lián)的文件緩沖區(qū)中的數(shù)據(jù)寫到文件中,保證文件的完整,收回與該文件相關(guān)的內(nèi)存空間,可供再分配,把磁盤文件名與文件流對象之間的關(guān)聯(lián)斷開,可防止誤操作修改了磁盤文件。如又要對文件操作必須重新打開。關(guān)閉文件并沒有取消文件流對象,該文件流對象又可與其他磁盤文件建立聯(lián)系。文件流對象在程序結(jié)束時,或它的生命期結(jié)束時,由析構(gòu)函數(shù)撤消。它同時釋放內(nèi)部分配的預(yù)留緩沖區(qū)。,例1分析以下程序的運行結(jié)果,對文本文件的讀寫直接使用插入運算符和提取運算符,#include#includeintmain()ofstreamofile(“test”);/打開test文件用于寫,即輸出ofile.open()if(!ofile)cout>str;/與get不同,>>遇到空格時結(jié)束ifile.close();cout<<str<ch)dfile<<ch;sfile.close();/如沒有這兩個關(guān)閉函數(shù),析構(gòu)函數(shù)也可關(guān)閉dfile.close();return0;,例2分析以下程序的運行結(jié)果,,例3編寫一個程序,將文本文件abc.txt復(fù)制到文本文件xyz.txt解:使用輸入流成員函數(shù)get()從文本文件abc.txt中讀取一個字符ch,然后使用輸出流成員函數(shù)put()將字符ch寫入文本文件xyz.txt中,繼續(xù)這一過程直到get()讀完為止。程序如下:,#include#includeintmain()ifstreamifile("abc.txt");if(!ifile)cout<<"abc.txt文件不能打開"<<endl;return0;ofstreamofile("xyz.txt");if(!ofile)cout<<"xyz.txt文件不能打開"<<endl;return0;charch;while(ifile.get(ch)ofile.put(ch);ifile.close();ofile.close();return1;,例4編寫一個程序建立一個輸出文件流,并將一個Date結(jié)構(gòu)體變量的二進(jìn)制值寫到該文件中。解:對二進(jìn)制文件的讀寫可以采用2種方法,一種是使用get()、put(),另一種是使用read()和write(),定義一個結(jié)構(gòu)體Date變量dt并初始化,通過write語句將其寫入到文件data.dat中。程序如下:,#includestructDateintmo,da,yr;voidmain()Datedt=2,20,2001;ofstreamofile("data.dat",ios:binary);ofile.write(char*),9.2.3二進(jìn)制文件的讀寫,每一個文件都有兩個指針,一個是讀指針,指示輸入操作當(dāng)前在文件中的位置;另一個是寫指針,指示下次寫操作的當(dāng)前位置。C+語言的文件不僅可以按這種順序方式進(jìn)行讀/寫,而且可以隨機(jī)地移動文件的讀寫指針。,(1)輸出流隨機(jī)訪問函數(shù)。一個輸出文件流保存一個內(nèi)部指針以指出下一次寫數(shù)據(jù)的位置。輸出流隨機(jī)訪問函數(shù)有seekp(下一次寫數(shù)據(jù)的位置)和tellp返回seekp()函數(shù)指針值。seekp(偏移量,參照位置)beg=0,/文件開頭cur=1,/文件指針的當(dāng)前位置end=2/文件結(jié)尾偏移量:被定義為long型,以字節(jié)數(shù)為單位。,9.2.4文件的隨機(jī)讀寫,(2)輸入流隨機(jī)訪問函數(shù)。在輸入流文件中,保留著一個指向文件中下一個將要讀數(shù)據(jù)的位置的內(nèi)部指針,可以用seekg(來設(shè)置這個指針)和tellg(返回當(dāng)前文件讀指針的位置)。seekg(偏移量,參照位置)beg=0,/文件開頭cur=1,/文件指針的當(dāng)前位置end=2/文件結(jié)尾偏移量:被定義為long型,以字節(jié)數(shù)為單位。使用seekg可以實現(xiàn)面向記錄的數(shù)據(jù)管理系統(tǒng),用固定長度的記錄大小乘以記錄號便得到相對于文件頭的字節(jié)位置,然后使用get讀這個記錄。,例5編寫一個程序,在文件city.dat中輸入幾個城市的名字和區(qū)號,并根據(jù)用戶輸入的區(qū)號查找對應(yīng)的城市。解:設(shè)計一個City類,用于數(shù)據(jù)處理。以讀寫方式打開文件City.dat,在其中寫入幾個城市數(shù)據(jù),然后將讀指針移到文件頭,依次查找用戶輸入的區(qū)號,找到后顯示。程序如下:,例6編寫一個程序,在二進(jìn)制文件data.dat中寫入3條記錄,顯示其內(nèi)容;然后刪除第2條記錄,并顯示刪除記錄后的文件內(nèi)容。解:C+不能直接刪除文件中的記錄,采用的方法是,先將記錄讀入到結(jié)構(gòu)數(shù)組stud中,然后再重寫入到data.dat文件中,這時不寫要刪除的內(nèi)容。程序如下:,

注意事項

本文(流類庫和輸入輸出(C程序設(shè)計(第2版)吳乃陵).ppt)為本站會員(zhu****ei)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!