流數(shù)據(jù)從一個對象到另一個對象的流動_第1頁
流數(shù)據(jù)從一個對象到另一個對象的流動_第2頁
流數(shù)據(jù)從一個對象到另一個對象的流動_第3頁
流數(shù)據(jù)從一個對象到另一個對象的流動_第4頁
流數(shù)據(jù)從一個對象到另一個對象的流動_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第十講I/O流流:數(shù)據(jù)從一個對象到另一個對象的流動 流是一種抽象,負責在數(shù)據(jù)的生產(chǎn)者和數(shù)據(jù)的消費者之間建立聯(lián)系,并管理數(shù)據(jù)的流動。1ios抽象流基類istream通用輸入流類和其他輸入流的基類ifstream輸入文件流類istream_withassigncin的輸入流類istrstream輸入字符串流類ostream通用輸出流類和其他輸出流的基類ofstream輸出文件流ostream_withassigncout,cerr,clog的輸入流類ostrstream輸出字符串流類iostream通用輸入輸出流類和其他輸入輸出流的基類fstream輸入輸出文件流類strstream輸入輸出字符串流類stdiostream標準I/O文件的輸入輸出類2I/O流類庫各個類之間的關(guān)系iosistreamostreamistrstreamistream_withassignifstreamostrstreamostream_withassignofstreamiostreamfstreamstrstreamstdiostreampublicpublicpublicpublicpublicpublicpublicpublicpublicpublicpublic3iosistreamifstreamistream_withassignistrstreamostreamofstreamostream_withassignostrstreamiostreamfstreamstrstreamstdiostreamiostream.hiostream.hfstream.hiostream.hstrstrea.hiostream.hfstream.hiostream.hstrstrea.hiostream.hfstream.hstrstrea.hstdiostr.hI/O流類所在包含文件4I/O流操作標準流類文件流類串流類控制符重載插入運算符5標準流類標準頭文件:iostream.h對應標準設備表:cin:鍵盤cout:屏幕cerr:屏幕//錯誤信息不再重定向,沒有緩沖clog:打印機//類似cerr,有緩沖,緩沖區(qū)滿輸出6標準流對象的定義: cin: istreamcin; cout: ostreamcout cerr: ostreamcerr clog: ostreamclog7文件流類ofstream,ifstream,fstream 文件流類定義的操作應用于外部設備,最典型的設備是磁盤中的文件。文件輸出流輸出流成員函數(shù)文件輸入流輸入流成員函數(shù)8文件輸出流構(gòu)造對象時指定文件名和模式Ofstream::ofstream(char*p, intmode=ios::out, intprot=)

p: 文件名

mode:

文件打開模式

prot:

文件共享方式9使用成員函數(shù)打開文件void

open(

const

char*

szName,

int

nMode

=

ios::out,

int

nProt

=

); 在對象消失時,由析構(gòu)函數(shù)關(guān)閉由構(gòu)造函數(shù)或open成員函數(shù)打開的文件。10文件打開選項ios::ate如果文件存在,輸出內(nèi)容加在末尾ios::in具有輸入能力ios::out具有輸出能力ios::trunc如果文件存在,清除文件內(nèi)容ios::nocreate如果文件不存在,返回錯誤Ios::ate如果文件存在,輸出內(nèi)容加在末尾ios::noreplace如果文件存在,返回錯誤ios::binary以二進制方式打開文件(不轉(zhuǎn)換字符)可以用‘|’組合打開方式11文件保護方式選項兼容共享方式獨占,不共享允許讀共享允許寫共享12例:/*向文件myfile中寫入一些信息,如果文件不存在,則創(chuàng)建該文件*///構(gòu)造對象時打開文件 ofstreamfout("e:\\temp\\my"); fout<<"thisis"<<endl;//使用成員函數(shù) ofstreamfout; fout.open("e:\\temp\\my"); fout<<"thisis"<<endl;13//向文件myfile中追加一些信息://構(gòu)造對象時打開文件 ofstreamfadd("e:\\temp\\my",ios::ate); fadd<<"anewfile"<<endl;//調(diào)用成員函數(shù) ofstreamfout; fout.open("e:\\temp\\my",ios::ate); fout<<"anewfile"<<endl;14輸出流成員函數(shù)Put函數(shù)

輸出一個字符 ostream&

put(

char

ch

); ofstreamfout("e:\\temp\\my",ios::ate); fout.put(‘A’)<<endl;//寬度和填充方式不起作用 fout<<‘A’<<endl;//寬度和填充方式起作用15例: cout<<setw(10); cout.put('a')<<endl; cout<<setw(10); cout<<'a'<<endl;輸出結(jié)果: a _________a16write函數(shù) 內(nèi)存中的一塊內(nèi)容寫到輸出文件流中 ostream&

write(

const

char*

pch,

int

nCount

); pch:內(nèi)存數(shù)據(jù)起始地址 nCount:字節(jié)數(shù) ofstreamfout("e:\\temp\\my",ios::ate); chara[]={"write"}; fout.write(a,sizeof(a));17 如果需要向文件流寫整形或?qū)嵭蛿?shù)據(jù)時,要先將他們轉(zhuǎn)換成字符串: #include<stdio.h> …… floatf=123.4567; charfstr[20]; sprintf(fstr,”%f”,f);18seekpseekp:設置文件指針ostream&

seekp(

streampos

pos

);ostream&

seekp(

streamoff

off,

ios::seek_dir

dir

); pos:長整形,指針的新位置 off:長整形,指針的偏移量 dir:相對位置: ios::beg

文件頭 ios::cur

文件指針的當前位置 ios::end

文件尾19tellp:返回文件指針streampos

tellp(); ofstreamfout("e:\\temp\\my"); fout.seekp(10);//從文件頭部向后移動10個字節(jié) fout<<"10"; intpos; pos=fout.tellp(); pos=pos+2; fout.seekp(pos);//從當前位置向后移動2個字節(jié) fout<<"12";20close()函數(shù)關(guān)閉文件,當在同一個流對象上打開了另外的文件,調(diào)用close()函數(shù)。 ofstreamfout; fout.open(“file1”); …… fout.close(); fout.open(“file2”); …… fout.close();21錯誤處理函數(shù)bad:出現(xiàn)不可恢復的錯誤,返回非0值fail:出現(xiàn)不可恢復的錯誤或一個預期條件,返回非0值good:沒有錯誤,沒有文件結(jié)束,返回非0值eof:文件結(jié)束,返回非0值clear:清除所有錯誤位rdstate:返回當前錯誤狀態(tài) if(cout.fail()) cerr<<“文件未打開”<<endl;22文件輸入流構(gòu)造對象時打開文件ifstream(constchar*szName, intnMode=ios::in, intnProt=);23調(diào)用成員函數(shù)voidopen(constchar*szName, intnMode=ios::in, intnProt=); 析構(gòu)函數(shù)關(guān)閉由構(gòu)造函數(shù)和成員函數(shù)打開的文件。當打開多個文件時可以使用close函數(shù)關(guān)閉文件。24輸入流成員函數(shù)get函數(shù)輸入一個字符 chara[10]; inti=0; ifstreamfin("e:\\temp\\my"); while(!fin.eof()){ a[i]=fin.get();//輸入帶空格

//或fin>>a[i];自動過濾空格 i++; }25getline函數(shù)istream&getline(char*pch, intnCount, chardelim='\n'); 從流中向存儲器pch讀入多個字符,直到遇到以下情況之一: 所讀字符個數(shù)將達到nCount; 將遇到終止字符; 文件結(jié)束。26read函數(shù)istream&read(char*pch, intnCount);//從文件讀nCount個字節(jié)到指定的存儲區(qū) chard[100]; ifstreamfin("e:\\temp\\my"); fin.read(d,20);27seekg函數(shù)返回下一個將讀位置的指針tellg函數(shù)設置下一個將讀位置的指針//從流中間隔讀入字符 while(!fin.eof()){ pos=fin.tellg(); pos++; fin.seekg(pos); fin.get(d[i]); i++; }28串流類ostrstream,istrstream,strstream 串流類允許將fstream類定義的文件操作應用于存儲區(qū)中的字符串。 串流類將字符串看作為設備。串流輸入串流輸出29串流輸入istrstream(char*pch,intnLength); charstr[10]={"student"}; chara[5]; istrstreamai(str,sizeof(a)-1); ai>>a;30串流輸出ostrstream(char*pch, intnLength, intnMode=ios::out);pch: 字符串數(shù)組nLength: 數(shù)組大小,當字符個數(shù)超過nLength 時,字符串不再接受輸出nMode: 打開方式31

//向字符數(shù)組中寫入字符串 charstr[10]; ostrstreamaout(str,sizeof(str)); aout<<"astudent"<<endl;32控制符輸出寬度和填充字符進制格式標志值精度33輸出寬度和填充字符setw(intwide) 設置域?qū)挒閣idesetfill(charch) 設置填充字符為ch34進制dec:十進制oct:八進制hex:十六進制35格式標志值 使用帶參數(shù)的setiosflags操縱符可以設置格式,它的影響是持久的,直到用resetiosflags恢復缺省值。36Ios::skipws在輸入中跳過空白Ios::left左對齊Ios::right右對齊Ios::internal在指定任何引導標記或基之后增加填充字符Ios::dec以十進制格式化數(shù)值Ios::oct以八進制格式化數(shù)值Ios::hex以十六進制格式化數(shù)值Ios::showbase以C++編譯器能讀的格式顯示數(shù)值常量37Ios::showpoint對浮點數(shù)值顯示小數(shù)點和尾部的0Ios::uppercase對十六進制數(shù)值顯示大寫字母A~F,對于科學格式顯示大寫字母E。Ios::showpos對于正數(shù)顯示正號Ios::scientifil以科學格式顯示浮點數(shù)值Ios::fixed以定點格式顯示浮點數(shù)值38精度浮點數(shù)輸出有效位數(shù)的缺省值是6,可以用setprecition改變精度(小數(shù)點后位數(shù))。 floata=234.5678923; cout<<setiosflags(ios::fixed) <<setw(10) <<setprecision(5) <<a<<resetiosflags(ios::fixed) <<endl;39重載插入運算符 當向流輸出類對象時,需要對插入運

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論