




已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第十講 I/O流,流:數據從一個對象到另一個對象的流動 流是一種抽象,負責在數據的生產者和數據的消費者之間建立聯系,并管理數據的流動。,ios,抽象流基類,istream,通用輸入流類和其他輸入流的基類,ifstream,輸入文件流類,istream_withassign,cin的輸入流類,istrstream,輸入字符串流類,ostream,通用輸出流類和其他輸出流的基類,ofstream,輸出文件流,ostream_withassign,cout,cerr,clog的輸入流類,ostrstream,輸出字符串流類,iostream,通用輸入輸出流類和其他輸入輸出流的基類,fstream,輸入輸出文件流類,strstream,輸入輸出字符串流類,stdiostream,標準I/O文件的輸入輸出類,I/O流類庫各個類之間的關系,ios,istream,ostream,istrstream,istream_withassign,ifstream,ostrstream,ostream_withassign,ofstream,iostream,fstream,strstream,stdiostream,public,public,public,public,public,public,public,public,public,public,public,ios,istream,ifstream,istream_withassign,istrstream,ostream,ofstream,ostream_withassign,ostrstream,iostream,fstream,strstream,stdiostream,iostream.h,iostream.h,fstream.h,iostream.h,strstrea.h,iostream.h,fstream.h,iostream.h,strstrea.h,iostream.h,fstream.h,strstrea.h,stdiostr.h,I/O流類所在包含文件,I/O流操作,標準流類 文件流類 串流類 控制符 重載插入運算符,標準流類,標準頭文件:iostream.h 對應標準設備表: cin:鍵盤 cout:屏幕 cerr:屏幕/錯誤信息不再重定向,沒有緩沖 clog:打印機/類似cerr,有緩沖,緩沖區(qū)滿輸出,標準流對象的定義: cin : istream cin; cout: ostream cout cerr: ostream cerr clog: ostream clog,文件流類,ofstream,ifstream,fstream 文件流類定義的操作應用于外部設備,最典型的設備是磁盤中的文件。 文件輸出流 輸出流成員函數 文件輸入流 輸入流成員函數,文件輸出流,構造對象時指定文件名和模式 Ofstream:ofstream(char* pFileName, int mode=ios:out, int prot=filebuf:openprot) pFileName: 文件名 mode: 文件打開模式 prot: 文件共享方式,使用成員函數打開文件 void open( const char* szName, int nMode = ios:out, int nProt = filebuf:openprot ); 在對象消失時,由析構函數關閉由構造函數或open成員函數打開的文件。,文件打開選項,ios:ate,如果文件存在,輸出內容加在末尾,ios:in,具有輸入能力,ios:out,具有輸出能力,ios:trunc,如果文件存在,清除文件內容,ios:nocreate,如果文件不存在,返回錯誤,Ios:ate,如果文件存在,輸出內容加在末尾,ios:noreplace,如果文件存在,返回錯誤,ios:binary,以二進制方式打開文件(不轉換字符),可以用|組合打開方式,文件保護方式選項,Filebuf:openprot,兼容共享方式,Filebuf:sh_none,獨占,不共享,Filebuf:sh_read,允許讀共享,Filebuf:sh_write,允許寫共享,例: /*向文件myfile中寫入一些信息,如果文件不存在,則創(chuàng)建該文件*/ /構造對象時打開文件 ofstream fout(“e:tempmyfile.txt“); fout“this is“endl; /使用成員函數 ofstream fout; fout.open(“e:tempmyfile.txt“); fout“this is“endl;,/向文件myfile中追加一些信息: /構造對象時打開文件 ofstream fadd(“e:tempmyfile.txt“,ios:ate); fadd“a new file“endl; /調用成員函數 ofstream fout; fout.open(“e:tempmyfile.txt“,ios:ate); fout“ a new file “endl;,輸出流成員函數,Put函數 輸出一個字符 ostream/寬度和填充方式起作用,例: coutsetw(10); cout.put(a)endl; coutsetw(10); coutaendl; 輸出結果: a _ _ _ _ _ _ _ _ _ a,write函數 內存中的一塊內容寫到輸出文件流中 ostream,如果需要向文件流寫整形或實型數據時,要先將他們轉換成字符串: #include float f=123.4567; char fstr20; sprintf(fstr,”%f”,f);,seekp seekp:設置文件指針 ostream pos:長整形,指針的新位置 off:長整形,指針的偏移量 dir:相對位置: ios:beg 文件頭 ios:cur 文件指針的當前位置 ios:end 文件尾,tellp:返回文件指針 streampos tellp(); ofstream fout(“e:tempmyfile.txt“); fout.seekp(10);/從文件頭部向后移動10個字節(jié) fout“10“; int pos; pos=fout.tellp(); pos=pos+2; fout.seekp(pos);/從當前位置向后移動2個字節(jié) fout“12“;,close()函數 關閉文件,當在同一個流對象上打開了另外的文件,調用close()函數。 ofstream fout; fout.open(“file1”); fout.close(); fout.open(“file2”); fout.close();,錯誤處理函數 bad:出現不可恢復的錯誤,返回非0值 fail:出現不可恢復的錯誤或一個預期條件,返回非0值 good:沒有錯誤,沒有文件結束,返回非0值 eof:文件結束,返回非0值 clear:清除所有錯誤位 rdstate:返回當前錯誤狀態(tài) if(cout.fail() cerr“文件未打開”endl;,文件輸入流,構造對象時打開文件 ifstream( const char* szName, int nMode = ios:in, int nProt = filebuf:openprot );,調用成員函數 void open( const char* szName, int nMode = ios:in, int nProt = filebuf:openprot ); 析構函數關閉由構造函數和成員函數打開的文件。當打開多個文件時可以使用close函數關閉文件。,輸入流成員函數,get函數 輸入一個字符 char a10; int i=0; ifstream fin(“e:tempmyfile.txt“); while(!fin.eof() ai=fin.get();/輸入帶空格 /或finai;自動過濾空格 i+; ,getline函數 istream 從流中向存儲器pch讀入多個字符,直到遇到以下情況之一: 所讀字符個數將達到nCount; 將遇到終止字符; 文件結束。,read 函數 istream,seekg函數 返回下一個將讀位置的指針 tellg函數 設置下一個將讀位置的指針 /從流中間隔讀入字符 while(!fin.eof() pos=fin.tellg(); pos+; fin.seekg(pos); fin.get(di); i+; ,串流類,ostrstream,istrstream,strstream 串流類允許將fstream類定義的文件操作應用于存儲區(qū)中的字符串。 串流類將字符串看作為設備。 串流輸入 串流輸出,串流輸入,istrstream( char* pch, int nLength ); char str10=“student“; char a5; istrstream ai(str,sizeof(a)-1); aia;,串流輸出,ostrstream( char* pch, int nLength, int nMode = ios:out ); pch: 字符串數組 nLength: 數組大小,當字符個數超過nLength 時,字符串不再接受輸出 nMode: 打開方式,/向字符數組中寫入字符串 char str10; ostrstream aout(str,sizeof(str); aout“a student“endl;,控制符,輸出寬度和填充字符 進制 格式標志值 精度,輸出寬度和填充字符,setw(int wide) 設置域寬為wide setfill(char ch) 設置填充字符為ch,進制,dec:十進制 oct:八進制 hex:十六進制,格式標志值,使用帶參數的setiosflags操縱符可以設置格式,它的影響是持久的,直到用resetiosflags恢復缺省值。,Ios:skipws 在輸入中跳過空白 Ios:left 左對齊 Ios:right右對齊 Ios:internal 在指定任何引導標記或基之后增加填充字符 Ios:dec 以十進制格式化數值 Ios:oct 以八進制格式化數值 Ios:hex 以十六進制格式化數值 Ios:showbase 以C+編譯器能讀的格式顯示數值常量,Ios:showpoint 對浮點數值顯示小數點和尾部的0 Ios:uppercase 對十六進制數值顯示大寫字母AF,對于科學格式顯示大寫字母E。 Ios:showpos 對于正數顯示正號 Ios:scientifil以科學格式顯示浮點數值 Ios:fixed 以定點格式顯示浮點數值,精度,浮點數輸出有效位數的缺省值是6,可以用setprecition改變精度(小數點后位數)。 float a=234.5678923; coutsetiosflags(ios:fixed) setw(10) setprecision(5) aresetiosflags(ios:fixed) endl;,重載插入運算符,當向流輸出類對象時,需要對插入運算符進行重載。,class base private: int m; int n; public: base(int i,int j):m(i),n(j)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 知識遷移與應用能力提升計劃
- 個人知識體系建設的必要性計劃
- 2025年網絡技術前景分析試題與答案
- 城市交通環(huán)境影響評價重點基礎知識點
- 2024年盤錦市盤山縣項目建設服務中心遴選真題
- 法律文書的格式與寫作試題及答案
- 2024年龍巖市永定區(qū)招聘中小學幼兒園教師真題
- 全面提升倉庫操作規(guī)范計劃
- 2024年湖南省應急管理廳下屬事業(yè)單位真題
- 秋季學生訪談與調研計劃
- 六年級下冊數學課件 整理和復習6.5比和比例 人教版 (共14張PPT)
- 福州市歷史建筑保護管理辦法(試行)
- JHA及SCL風險評價方法講解(參考)
- DB11T 1933-2021 人乳庫建立與運行規(guī)范
- 1.3.1動量守恒定律課件(共13張PPT)
- 國網北京市電力公司授權委托書(用電)
- 中小學教育懲戒規(guī)則(試行)全文解讀ppt課件
- 調度指揮與統計分析課程教學設計
- 常暗之廂(7規(guī)則-簡體修正)
- 終端塔基礎預偏值(抬高值)計算表格
- 海外醫(yī)療服務委托合同協議書范本模板
評論
0/150
提交評論