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

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

  • 資源ID:3409954       資源大小:160KB        全文頁(yè)數(shù):21頁(yè)
  • 資源格式: PPT        下載積分:9.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

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

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

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

注意事項(xiàng)

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

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




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

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

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


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