版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
輸入輸出流類第一頁(yè),共四十二頁(yè),2022年,8月28日
外部設(shè)備可分為人機(jī)交互設(shè)備和存儲(chǔ)設(shè)備兩個(gè)大類。 人機(jī)交互設(shè)備主要指鍵盤、顯示器等終端控制臺(tái)設(shè)備和打印機(jī)。 存儲(chǔ)設(shè)備指磁帶、磁(軟、硬)盤、光盤等以文件形式存儲(chǔ)持久數(shù)據(jù)的設(shè)備。
第二頁(yè),共四十二頁(yè),2022年,8月28日 早期程序設(shè)計(jì)語(yǔ)言中通常以文件方式來(lái)統(tǒng)一人機(jī)交互設(shè)備和存儲(chǔ)設(shè)備的輸入輸出操作。即將人機(jī)交互設(shè)備當(dāng)作一種特殊文件對(duì)待。 以文件方式統(tǒng)一管理外部設(shè)備可以屏蔽實(shí)際物理設(shè)備的差異,有利于整體上簡(jiǎn)化程序設(shè)計(jì)語(yǔ)言與外部設(shè)備交換信息的處理過(guò)程。第三頁(yè),共四十二頁(yè),2022年,8月28日
C++語(yǔ)言對(duì)輸入輸出的處理引入了“流”這個(gè)比文件抽象程度更高的概念。輸入輸出操作被看作數(shù)據(jù)在源設(shè)備對(duì)象與目標(biāo)設(shè)備對(duì)象之間的流動(dòng)。
C++中完成輸入輸出操作的類稱為流類,并提供了可重用的流類庫(kù)。第四頁(yè),共四十二頁(yè),2022年,8月28日11.1C++流庫(kù)結(jié)構(gòu) 標(biāo)準(zhǔn)ANSIC程序中的絕大部分工作是由ANSIC標(biāo)準(zhǔn)庫(kù)中的printf,scanf完成的,I/O功能作為ANSIC標(biāo)準(zhǔn)庫(kù)功能的一部分被提供。在C++中iostream庫(kù)提供了printf、scanf功能的替代方法,輸入輸出功能的實(shí)現(xiàn)由一個(gè)iostream對(duì)象完成。第五頁(yè),共四十二頁(yè),2022年,8月28日1.
流緩沖區(qū)類在C++I/O類庫(kù)定義文件iostream.h中有一個(gè)streambuf類,它用來(lái)提供物理設(shè)備的接口。緩沖區(qū)由一段預(yù)留的字符存儲(chǔ)空間和兩個(gè)指針組成,兩個(gè)指針?lè)謩e指向字符要被插入或被取出的位置。streambuf類定義了一組緩沖或處理流的通用方法,諸如設(shè)置緩沖區(qū),移動(dòng)指針,存、取字符等。
conbufstrstreambuffilebufstreambuf圖11.1流緩沖區(qū)類的派生關(guān)系C++I/O流類的結(jié)構(gòu)(1)第六頁(yè),共四十二頁(yè),2022年,8月28日streambuf類有三個(gè)派生類,其中:
(1)
conbuf在constream.h中定義,提供光標(biāo)控制、清屏,定義活動(dòng)窗口等控制臺(tái)操作接口和I/O緩沖區(qū)管理功能。(2)
filebuf在fstream.h中定義,它用來(lái)維護(hù)文件緩沖區(qū)的打開,關(guān)閉,讀、寫,建立磁盤文件的內(nèi)存代理。(3)
strstreambuf在strstream.h中定義,提供在內(nèi)存進(jìn)行提取和插入操作的緩沖區(qū)管理。第七頁(yè),共四十二頁(yè),2022年,8月28日2.
輸入輸出流類
iostream.h中還有以ios類為基類的一組流類的定義。
ios類及其派生類均含有一個(gè)指向streambuf類的指針。通過(guò)streambuf類代理物理設(shè)備的操作。 從類ios開始,逐級(jí)派生,形成了較為復(fù)雜的結(jié)構(gòu),要很好地使用C++流類,必須逐級(jí)了解其父類的public、和protected類型的成員函數(shù)、成員變量。第八頁(yè),共四十二頁(yè),2022年,8月28日istream_withassignostream_withassignstrstreambaseifstreamistrstreamofstreamostrstreamfstreamstrstreamiostreamiostream_withassignistreamostreamfstreambaseios圖11.2ios類的派生關(guān)系C++I/O流類的結(jié)構(gòu)(2)第九頁(yè),共四十二頁(yè),2022年,8月28日流類分類流類名稱流類作用流基礎(chǔ)類ios所有流類的父類、保存流的狀態(tài)并處理錯(cuò)誤輸入流類istream輸入流基礎(chǔ)類、將流緩沖區(qū)中的字符作格式化和非格式化之間的轉(zhuǎn)換,并輸入。ifstream文件輸入流類istream_withassign為cin輸入流類即操作符>>輸入流istrstream串輸入流類輸出流類ostream輸出流的基礎(chǔ)類、將流緩沖區(qū)中的數(shù)據(jù)格式化或非格式化轉(zhuǎn)換,并輸出。ofstream文件輸出流類ostream_withassigncout,cerr,clog輸出的流類即操作符<<輸出流。ostrstream串輸出流類文件流類fstreambase文件流基礎(chǔ)類串流strstreambase串流基礎(chǔ)類輸入/輸出流類iostream多目的輸入/輸出流類的基礎(chǔ)類fstream文件流輸入/輸出類strstream串流輸入/輸出類流類庫(kù)成員列表第十頁(yè),共四十二頁(yè),2022年,8月28日上表中:(1)基礎(chǔ)類ios是所有流類的根。它有四個(gè)直接派生類:istream、ostream、fstreambase和strstreambase,它們是流類庫(kù)中的基本流類。(2)istream和ostream是ios直接派生類,其功能是將數(shù)據(jù)格式化或非格式化數(shù)據(jù)與流緩沖區(qū)之間作轉(zhuǎn)換處理。(3)istream_withassign,ostream_withassign分別從istream和ostream類派生,并定義了cin,cout流,作標(biāo)準(zhǔn)輸入和輸出處理。(4)而iostream是istream和ostream類的多繼承派生類,用來(lái)操作文件流的標(biāo)準(zhǔn)輸入/輸出。(5)ifstream是istream和fstreambase的多繼承派生類,用于處理文件的輸入。(6)ofstream是ostream和fstreambase的多繼承派生類,用于處理文件的輸出。第十一頁(yè),共四十二頁(yè),2022年,8月28日11.2C++輸入與輸出
輸入輸出流可以從文件或設(shè)備中讀出或?qū)懭霐?shù)據(jù),C++運(yùn)行庫(kù)提供了兩種輸入輸出功能。
(1)類輸入/輸出,把數(shù)據(jù)作為單字符流處理??梢蕴幚砗?jiǎn)單的數(shù)據(jù),也可以處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。 (2)直接調(diào)用操作系統(tǒng)的底層功能實(shí)現(xiàn)輸入/輸出操作。
每一類都有文件和標(biāo)準(zhǔn)的輸入和輸出功能。這里著重討論使用流類的標(biāo)準(zhǔn)輸入和輸出,以及流類的文件輸入和輸出。第十二頁(yè),共四十二頁(yè),2022年,8月28日標(biāo)準(zhǔn)輸入輸出 標(biāo)準(zhǔn)輸入與輸出是指讀鍵盤的數(shù)據(jù)和將數(shù)據(jù)輸出到屏幕。C++用istream_withassign類和ostream_withsaaign類來(lái)實(shí)現(xiàn)標(biāo)準(zhǔn)輸入輸出功能。
iostream.h文件中以下兩句定義cin和cout兩個(gè)標(biāo)準(zhǔn)流對(duì)象: istream_withassigncin; ostream_withassigncout;
在標(biāo)準(zhǔn)輸入類istream_withassign和標(biāo)準(zhǔn)輸出類ostream_withassign分別對(duì)操作符“>>”“<<”進(jìn)行了重載,用于完成對(duì)各種簡(jiǎn)單數(shù)據(jù)類型的輸入和輸出。第十三頁(yè),共四十二頁(yè),2022年,8月28日格式化的輸入輸出C++提供了兩種格式控制函數(shù)用來(lái)控制輸入輸出的格式:ios類中定義的格式控制成員函數(shù)基于流對(duì)象的操縱函數(shù)。相比之下操縱函數(shù)使用更為方便。下面重點(diǎn)介紹操縱函數(shù)的概念和用法。第十四頁(yè),共四十二頁(yè),2022年,8月28日1.ios類中定義的格式控制標(biāo)志ios類中定義了一個(gè)數(shù)據(jù)成員:格式控制標(biāo)志字longx_flags。x_flags每一位的狀態(tài)值用枚舉符號(hào)常量定義。enum{skipws=0x0001, //跳過(guò)輸入空格
left=0x0002, //輸出左對(duì)齊調(diào)整
right=0x0004, //輸出右對(duì)齊調(diào)整
internal=0x0008, //輸出符號(hào)和基指示符后的填補(bǔ)
dec=0x0010, //轉(zhuǎn)換為十進(jìn)制(in/out)oct=0x0020, //轉(zhuǎn)換為八進(jìn)制(in/out)hex=0x0040, //轉(zhuǎn)換為十六進(jìn)制(in/out)showbase=0x0080, //輸出顯示基指示符
showpoint=0x0100, //輸出顯示小數(shù)點(diǎn)
uppercase=0x0200, //大寫十六進(jìn)制輸出
showpos=0x0400, //正整數(shù)顯示前加上”+”scientific=0x0800, //輸出用科學(xué)表示法表示浮點(diǎn)數(shù)
fixed=0x1000, //輸出用固定小數(shù)點(diǎn)表示浮點(diǎn)數(shù)
unitbuf=0x2000, //在輸出操作后刷新所有流
stdio=0x4000 //在輸出后刷新stdout和stderr};第十五頁(yè),共四十二頁(yè),2022年,8月28日l(shuí)ongx_flags=0x0080=0000000010000000輸出顯示基指示符longx_flags=0x0003=0000000000000011跳過(guò)輸入空格&輸出左對(duì)齊調(diào)整longx_flags=0x0083=0000000010000011跳過(guò)輸入空格
&輸出左對(duì)齊調(diào)整
&輸出顯示基指示符longx_flags標(biāo)志可以由ios類的成員函數(shù)flags(),setf()和unsetf()訪問(wèn),也可以用操縱函數(shù)操作。
第十六頁(yè),共四十二頁(yè),2022年,8月28日2.操縱函數(shù)和操縱符操縱函數(shù)分為帶參數(shù)和不帶參數(shù)兩種。不帶參數(shù)的操縱函數(shù)又叫操縱符。操縱符定義在頭文件iostream.h中,操縱函數(shù)定義在頭文件iomanip.h中.
第十七頁(yè),共四十二頁(yè),2022年,8月28日表11.2iostream.h中的操縱符
操作符用法舉例結(jié)果說(shuō)明dec
cout<<dec<<intvar;cin>>dec>>intvar;將整數(shù)轉(zhuǎn)化為十進(jìn)制格式輸出將整數(shù)轉(zhuǎn)化為十進(jìn)制格式輸入hexcout<<hex<<intvar;cin>>hex>>intvar;將整數(shù)轉(zhuǎn)化為十六進(jìn)制格式輸出將整數(shù)轉(zhuǎn)化為十六進(jìn)制格式輸入octcout<<oct<<intvar;cin>>oct>>intvar;將整數(shù)轉(zhuǎn)化為八進(jìn)制格式輸出將整數(shù)轉(zhuǎn)化為八進(jìn)制格式輸入wscin>>ws;忽略輸入流中的空格endlcout>>endl;插入換行符,刷新流endscout>>ends;插入串最后的串結(jié)束符flushcout>>flush;刷新一個(gè)輸入流第十八頁(yè),共四十二頁(yè),2022年,8月28日表11.3iomanip.h中的操縱函數(shù)setprecision(int)cout<<setprecision(6)cin>>setprecision(15)輸出浮點(diǎn)數(shù)精度為6位小數(shù)輸入浮點(diǎn)數(shù)精度為15位小數(shù)setw(int)cout<<setw(6)<<var;cin>>setw(24)>>buf;輸出數(shù)據(jù)寬度為6輸入數(shù)據(jù)寬度為24setiosflags(long)cout<<setioflags(ios::hex|ios::uppercase)cin>>setioflags(ios::oct|ios::skipws)指定數(shù)據(jù)輸出的格式為十六進(jìn)制格式且用大寫字母輸出指定數(shù)據(jù)輸入的格式為八進(jìn)制格式且跳過(guò)輸入中的空白resetiosflags(long)cout<<resetiosflags(ios::dec)cin>>resetiosflags(ios::hex)取消數(shù)據(jù)輸出的格式為十進(jìn)制格式取消數(shù)據(jù)輸入的格式為十進(jìn)制格式第十九頁(yè),共四十二頁(yè),2022年,8月28日例11.1操縱符的使用#include<iostream.h>#include<iomanip.h>voidmain(){doublevalues[]={1.23,35.36,653.7,4358.24};char*names[]={"Zoot","Jimmy","Al","Stan"};cout<<setiosflags(ios::fixed);//浮點(diǎn)數(shù)使用普通記數(shù)法表示
for(inti=0;i<4;i++)cout<<setiosflags(ios::left)//設(shè)置左對(duì)齊
<<setw(6)//設(shè)置數(shù)據(jù)寬度為6位
<<names[i]<<resetiosflags(ios::left)//撤消左對(duì)齊
<<setw(10)//設(shè)置數(shù)據(jù)寬度為10位
<<setprecision(1)//設(shè)置浮點(diǎn)數(shù)精度1位
<<values[i]<<endl;}輸出為:Zoot1.2Jimmy35.4Al653.7Stan4358.2
第二十頁(yè),共四十二頁(yè),2022年,8月28日11.3流類運(yùn)算符重載使用傳統(tǒng)的C語(yǔ)言中printf,scanf等輸入輸出函數(shù)編寫的程序,當(dāng)輸入輸出的數(shù)據(jù)類型發(fā)生變化時(shí),必須重寫所有的輸入輸出代碼。使用C++流類后,這個(gè)問(wèn)題不復(fù)存在。C++利用流類對(duì)象cin、cout的成員函數(shù)重載任意類的輸入輸出操作。流的輸入運(yùn)算符”>>”又稱提取運(yùn)算符,流的輸出運(yùn)算符”<<”又稱插入運(yùn)算符,它們都可以重載。第二十一頁(yè),共四十二頁(yè),2022年,8月28日例:用戶定義的日期Date類的輸入輸出。
為保持和簡(jiǎn)單類型的輸入輸出同樣的形式,需要為Date類重載操作符<<和>>。 由于重載的函數(shù)需要訪問(wèn)Date類的私有的和受保護(hù)的成員,應(yīng)該把這些重載的函數(shù)定義為Date類的友元。第二十二頁(yè),共四十二頁(yè),2022年,8月28日#include<iostream.h>classDate{intmo,da,yr;public:Date(intm,intd,inty){mo=m;da=d;yr=y;}friendostream&operator<<(ostream&os,Date&dt);friendistream&operator>>(istream&is,Date&dt);};ostream&operator<<(ostream&os,Date&dt){os<<dt.mo<<'/'<<dt.da<<'/'<<dt.yr;returnos;//返回流的引用}istream&operator>>(istream&is,Date&dt){is>>dt.mo>>dt.da>>dt.yr;returnis;//返回流的引用}voidmain(){intmo,da,yr;Datedt(7,1,1997);cout<<dt<<endl;cin>>mo>>da>>yr;Dateotherdt(mo,da,yr);cout<<otherdt<<endl;Datedt_input(0,0,0);cin>>dt_input;cout<<dt_input<<endl;}例11.2用戶定義Date數(shù)據(jù)類中對(duì)流類運(yùn)算符<<、>>函數(shù)重載第二十三頁(yè),共四十二頁(yè),2022年,8月28日重載操作符函數(shù)時(shí)應(yīng)該注意以下幾點(diǎn):
重載的操作符函數(shù)有兩個(gè)參數(shù)。 如果重載的是輸出操作符<<,第一個(gè)參數(shù)是對(duì)流ostream類的引用,如果重載的是輸入操作符>>,第一個(gè)參數(shù)是對(duì)流istream類的引用。 第二個(gè)參數(shù)是要定義輸入輸出類的引用,也可以是此類的指針。
運(yùn)算符重載必須定義為類的友元,因?yàn)樽蟛僮鲾?shù)必須是流類對(duì)象而不是輸入/輸出類的對(duì)象,不能使用隱式左操作數(shù)。
第二十四頁(yè),共四十二頁(yè),2022年,8月28日#查詢復(fù)雜程度復(fù)雜數(shù)據(jù)、有查詢對(duì)象-關(guān)系數(shù)據(jù)庫(kù)(ORDB)簡(jiǎn)單數(shù)據(jù)、無(wú)查詢文本文件簡(jiǎn)單數(shù)據(jù)、無(wú)查詢面向?qū)ο髷?shù)據(jù)庫(kù)(OODB)簡(jiǎn)單數(shù)據(jù)、有查詢關(guān)系式數(shù)據(jù)庫(kù)(RDB)第二十五頁(yè),共四十二頁(yè),2022年,8月28日11.4文件流與文件操作11.4.1C++標(biāo)準(zhǔn)庫(kù)文件輸入與輸出標(biāo)準(zhǔn)的C++庫(kù)提供了文件輸入輸出功能,它們是以函數(shù)的形式給出的。這里將對(duì)一些常用的函數(shù)如fopen、fclose、fwrite、fread等作簡(jiǎn)要說(shuō)明。標(biāo)準(zhǔn)的C庫(kù)對(duì)文件輸入輸出功能函數(shù)定義在stdio.h頭文件中,并且定義了一個(gè)FILE型文件結(jié)構(gòu),在每一個(gè)文件被打開時(shí),都有一個(gè)FILE型文件指針與之關(guān)聯(lián),以便保存文件的相關(guān)信息,完成文件的讀寫操作。第二十六頁(yè),共四十二頁(yè),2022年,8月28日對(duì)文件的操作一般分為三個(gè)步驟:(1)使用文件打開函數(shù)對(duì)文件進(jìn)行打開,并與文件指針建立關(guān)系;(2)利用文件指針和寫文件、讀文件函數(shù)對(duì)文件進(jìn)行操作。(3)使用文件關(guān)閉函數(shù),對(duì)文件關(guān)閉。
第二十七頁(yè),共四十二頁(yè),2022年,8月28日1打開文件函數(shù)fopen完成文件操作第一步,可使用fopen函數(shù),該函數(shù)定義為:FILE*fopen(constchar*filename,constchar*mode);其中參數(shù)filename是文件名字符串,mode為文件打開的模式。使用時(shí)注意:1).返回值是返回打開文件的指針,如果文件不存在或者不能找到文件,fopen調(diào)用返回空指針(NULL)表示為文件打開失敗。
2).參數(shù)mode可取以下值"r"
只讀方式打開文件。"w"寫方式打開文件,如果文件已經(jīng)存在,其文件中的內(nèi)容被破壞。"r+"
讀和寫的方式打開。(文件必須已經(jīng)存在,否則將導(dǎo)致異常)"
w+"讀和寫方式打開一空文件,如果該文件已經(jīng)存在,其內(nèi)容將被破壞。"
a+"為了讀文件和附加新內(nèi)容而打開文件。"
t"
以文本方式打開文件。"
b"
二進(jìn)制的方式打開文件。第二十八頁(yè),共四十二頁(yè),2022年,8月28日2.文件讀寫函數(shù)fread和fwrite
完成第二步操作,就是要對(duì)文件進(jìn)行讀和寫數(shù)據(jù),一般常用fread讀文件函數(shù)和fwrite函數(shù),函數(shù)的使用格式為:
size_tfread(void*buffer,size_tsize,size_tcount,FILE*stream);size_tfwrite(constvoid*buffer,size_tsize,size_tcount,FILE*stream);使用時(shí)注意:(1)fread函數(shù)讀文件返回文件數(shù)據(jù)記錄的數(shù)目;(2)fwrite函數(shù)返回實(shí)際寫入文件數(shù)據(jù)記錄的數(shù)目;(3)參數(shù)buffer 指向數(shù)據(jù)緩沖區(qū)。fread函數(shù)將讀出的數(shù)據(jù)放在緩沖區(qū)中供程序使用;fwrite函數(shù)將寫入文件的數(shù)據(jù)放在沖區(qū)中以便寫入文件。(4)size為從文件讀出和寫入文件的字節(jié)數(shù)(5)count一次從文件讀出數(shù)據(jù)的最大記錄數(shù)和一次寫入文件的最大記錄數(shù)。(6)stream文件結(jié)構(gòu)指針。fread函數(shù)為打開文件的針;fwrite函數(shù)為把數(shù)據(jù)要寫入文件的指針。第二十九頁(yè),共四十二頁(yè),2022年,8月28日3關(guān)閉文件函數(shù)fclose
完成第三步操作可以使用fclose,其格式為:intfclose(FILE*stream);//關(guān)閉流文件(fclose)int_fcloseall(void);//關(guān)閉所有的流(_fcloseall)
使用時(shí)注意:
(1)fclose函數(shù)返回值為0時(shí)表示文件成功關(guān)閉,否則返回值為非0。(2)fcloseall成功關(guān)閉所打開的文件時(shí),函數(shù)返回值為關(guān)閉文件的總數(shù)。(3)fclose函數(shù)的參數(shù)為指向FILE結(jié)構(gòu)體的指針。第三十頁(yè),共四十二頁(yè),2022年,8月28日例11.3打開一個(gè)名為
FREAD.OUT的文件并寫入25個(gè)字符,然后將從文件中讀出的字符#include<stdio.h>voidmain(){FILE*stream;charlist[30];inti,numread,numwritten;//文本模式打開文件并寫數(shù)據(jù)
if((stream=fopen("fread.out","w+t"))!=NULL){for(i=0;i<25;i++)list[i]=(char)('z'-i);numwritten=fwrite(list,sizeof(char),25,stream);printf("Wrote%ditems\n",numwritten);fclose(stream);}elseprintf("Problemopeningthefile\n");/*讀出25個(gè)字符*/if((stream=fopen("fread.out","r+t"))!=NULL){numread=fread(list,sizeof(char),25,stream);printf("Numberofitemsread=%d\n",numread);printf("Contentsofbuffer=%.25s\n",list);fclose(stream);}elseprintf("Filecouldnotbeopened\n");}輸出:Wrote25itemsNumberofitemsread=25Contentsofbuffer=zyxwvutsrqponmlkjihgfedcb第三十一頁(yè),共四十二頁(yè),2022年,8月28日文件輸入輸出流在C++中,對(duì)文件的輸入輸出操作提供了另一種操作方式,即流類庫(kù)的文件操作,這些類是ofstream與ifstream文件輸入輸出流類。其對(duì)文件操作也需要上述的三個(gè)步驟。1.文件的輸出文件的輸出由ofstream完成,它由ostream類繼承而來(lái)(見(jiàn)圖11.2),并繼承了它的操作,因此可以利用ostream重載的操作符<<把數(shù)據(jù)寫入文件流中。進(jìn)行文件輸出時(shí)首先要?jiǎng)?chuàng)建文件輸出流ofstream類的一個(gè)對(duì)象,ofstream類的構(gòu)造函數(shù)用于在不同情況下構(gòu)造文件流。下面是ofstream類造函數(shù)的定義:ofstream();ofstream(constcharFAR*,int=ios::out,int=filebuf::openprot);第三十二頁(yè),共四十二頁(yè),2022年,8月28日(1)文件的打開第一個(gè)構(gòu)造函數(shù)用于構(gòu)造一個(gè)不帶參數(shù)的流,如果需要可以在用它的open函數(shù)打開一個(gè)文件,下面是open函數(shù)的定義:voidopen(constsignedchar_FAR*,int=ios::in,int=filebuf::openprot);它需要三個(gè)參數(shù),第一個(gè)參數(shù)為字符串,為打開文件的文件名;第二個(gè)參數(shù)為文件模式,缺省為ios::out,表示為輸入打開,其它文件模式見(jiàn)表11.4;第三個(gè)參數(shù)為文件的保護(hù)方式它們有三種取值0表示普通文件、1表示只讀文件、2表示隱含文件、4表示系統(tǒng)文件、8表示文檔位格式。例如對(duì)打開一個(gè)test1.dat文件可用如下語(yǔ)句:
ofstreamafile();afile.open("test1.dat");或afile.open("test1.dat",ios::out|ios::binary)第二個(gè)構(gòu)造函數(shù)可以在創(chuàng)建文件時(shí)通過(guò)第一個(gè)參數(shù)直接指定文件名。第二個(gè)參數(shù)、第三個(gè)參數(shù)同上述open函數(shù)。對(duì)打開一個(gè)test1.dat文件可用如下語(yǔ)句:
ofstreamafile("test1.dat");ofstreamafile("test1",ios::noreplace);ofstreamafile("test1",ios::append);ofstreamafile("test1",ios::out|ios::binary);第三十三頁(yè),共四十二頁(yè),2022年,8月28日表11.4
文件模式模式功能說(shuō)明Ios:app追加數(shù)據(jù),總是加在源文件的尾部Ios::ate在打開的文件上找到文件尾Ios::in為輸入打開文件(默認(rèn)對(duì)ifstream適用)Ios::out為輸出打開文件(默認(rèn)對(duì)ofstream適用)Ios::binary打開二進(jìn)制文件Ios::trunc如文件存在則消去原內(nèi)容Ios::nocreate如文件不存在,打開失敗Ios::noreplace如文件存在,打開失敗,除非設(shè)置了ate和app第三十四頁(yè),共四十二頁(yè),2022年,8月28日2).文件的寫入數(shù)據(jù)函數(shù)ofstream類是從ostream類繼承而來(lái),因而可以使用ostream類的寫數(shù)據(jù)的函數(shù)和操作符把數(shù)據(jù)寫入文件,操作符函數(shù)在前面已經(jīng)介紹,這里實(shí)現(xiàn)寫數(shù)據(jù)的函數(shù)是:class_CRTIMPostream:virtualpublicios{……public://寫入字符文件
inline ostream&put(char); ostream&put(unsignedchar);inline ostream&put(signedchar);//寫入字符串str的內(nèi)容到文件
ostream&write(constchar*,int);inline ostream&write(constunsignedchar*,int);inline ostream&write(constsignedchar*,int);//移動(dòng)輸出文件的位置指針
ostream&seekp(streampos); ostream&seekp(streamoff,ios::seek_dir);//取當(dāng)前輸出文件位置指針的值
streampostellp();
…….}第三十五頁(yè),共四十二頁(yè),2022年,8月28日3).文件的關(guān)閉函數(shù)
ofstream類也是從fstreambase類繼承的,可以使用fstreambase類的close();來(lái)關(guān)閉文件。
第三十六頁(yè),共四十二頁(yè),2022年,8月28日2.文件的輸入文件的輸入由類ifstream完成,它由iostream和fstreambase類繼承而來(lái),并繼承了它的操作符>>函數(shù)和文件打開,從文件中讀數(shù)據(jù)、關(guān)閉文件的函數(shù)。ifstream也提供了構(gòu)造函數(shù):ifstream();ifstream(constcahr_FAR*,int=ios::in,int=filebuf::openprot);第三十七頁(yè),共四十二頁(yè),2022年,8月28日1).文件的打開第一個(gè)構(gòu)造函數(shù)用于構(gòu)造一個(gè)不帶參數(shù)的流,如果需要可以在用它的open函數(shù)打開一個(gè)文件,下面是open函數(shù)的定義:voidopen(constsignedchar_FAR*,int=ios::in,int=filebuf::openprot);它和第二構(gòu)造函數(shù)的使用同文件的輸入中的文件打開。
2).文件的數(shù)據(jù)讀出函數(shù)可以使用istream類的寫數(shù)據(jù)的函數(shù)和操作符把數(shù)據(jù)寫入文件,操作符函數(shù)在前面已經(jīng)介紹,這里實(shí)現(xiàn)寫數(shù)據(jù)的函數(shù)是:class_CRTIMPistream:virtualpublicios{……public://讀取文件數(shù)據(jù)到字符串內(nèi)
inlineistream&get(char*,int,char='\n');inlineistream&get(unsignedchar*,int,char='\n');inlineistream&get(signedchar*,int,char='\n');//讀取文件數(shù)據(jù)到字符內(nèi)
istream&get(char&);inlineistream&get(unsignedchar&);inlineistream&get(signedchar&);istream&get(streambuf&,char='\n');//讀取文件一行數(shù)據(jù)到字符串內(nèi)
inlineistream&getline(char*,int,char='\n');inlineistream&getline(unsignedchar*,int,char='\n');inlineistream&getline(signedchar*,int,char='\n');inlineistream&ignore(int=1,int=EOF);//讀取文件數(shù)據(jù)到字符串內(nèi)
istream&read(char*,int);inlineistream&read(unsignedchar*,int);inlineistream&read(signedchar*,int);intgcount()const{returnx_gcount;}intpeek();istream&putback(char);intsync();//移動(dòng)輸入文件指針位置
istream&seekg(streampos);istream&seekg(streamoff,ios::seek_dir);//讀取當(dāng)前輸入文件指針位置的值streampostellg();……}
第三十八頁(yè),共四十二頁(yè),2022年,8月28日3).文件的關(guān)閉函數(shù)ifstream類也是從fstreambase類繼承的,可以使用fstreambase類的close();來(lái)關(guān)閉文件。第三十九頁(yè),共四十二頁(yè),2022年,8月28日例11.4使用istream和ostream類的文件操作函數(shù)把一個(gè)文件file.in的內(nèi)容拷貝到另一個(gè)文件file.out。#include<iostream.h>#include<fstream.h>#include<process.h>voidmain(){charch;ifstreamfin(“file.in”);//創(chuàng)建一個(gè)輸入流,并和輸入文件file.in聯(lián)系ofstreamfout(“file.out”);//創(chuàng)建一輸出流,并和輸出文件file.out聯(lián)系if(!fin){cerr<<”Cannotopenfilefile.in”;exit(-1);//如果原文件出錯(cuò),顯示信息并退出}i
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026北京國(guó)防科技大學(xué)電子對(duì)抗學(xué)院幼兒園社會(huì)招聘3人參考考試題庫(kù)附答案解析
- 排澇站安全生產(chǎn)獎(jiǎng)懲制度
- 生產(chǎn)車輛調(diào)度室管理制度
- 安全生產(chǎn)檢查八大制度
- 小麥生產(chǎn)巡查制度范本
- 牛奶生產(chǎn)規(guī)章制度
- 人員生產(chǎn)管理制度匯編
- 生產(chǎn)作業(yè)規(guī)章制度
- 生產(chǎn)管理內(nèi)部協(xié)調(diào)制度
- 恒溫庫(kù)安全生產(chǎn)責(zé)任制度
- 建筑防水工程技術(shù)規(guī)程DBJ-T 15-19-2020
- 矢量網(wǎng)絡(luò)分析儀校準(zhǔn)規(guī)范
- 高考英語(yǔ)閱讀理解分類及方法課件
- 紹興金牡印染有限公司年產(chǎn)12500噸針織布、6800萬(wàn)米梭織布高檔印染面料升級(jí)技改項(xiàng)目環(huán)境影響報(bào)告
- DHA乳狀液制備工藝優(yōu)化及氧化穩(wěn)定性的研究
- 2023年江蘇省五年制專轉(zhuǎn)本英語(yǔ)統(tǒng)考真題(試卷+答案)
- 岳麓書社版高中歷史必修三3.13《挑戰(zhàn)教皇的權(quán)威》課件(共28張PPT)
- GC/T 1201-2022國(guó)家物資儲(chǔ)備通用術(shù)語(yǔ)
- 污水管網(wǎng)監(jiān)理規(guī)劃
- GB/T 6730.65-2009鐵礦石全鐵含量的測(cè)定三氯化鈦還原重鉻酸鉀滴定法(常規(guī)方法)
- GB/T 35273-2020信息安全技術(shù)個(gè)人信息安全規(guī)范
評(píng)論
0/150
提交評(píng)論