io庫型別和標頭檔案
頭檔案型別
iostream
istream 從流中讀取資料
ostream 向流寫入資料
iostream 讀寫流
fstream
ifstream 從檔案中讀取資料
ofstream 檔案寫入資料
fstream 讀寫檔案
sstream
istringstream 從string讀取資料
ostringstream 向string寫入資料
stringstream 讀寫string
由於ifstream 和istringstream都繼承自istream。因此我們可以像使用istream物件一樣來使用ifstream和istringstram物件。
(繼承:程式設計功能,令乙個型別可以從另乙個型別繼承介面。)
eg: ostringstream out1;
string test(4,『r』);
out1 << test <io物件無拷貝或賦值
注意:因為我們不能對io物件進行拷貝或者賦值操作
因此以下操作一定要避免
1. 將流型別設定為形參或者返回型別
2.傳遞和返回流的引用不能是const的(讀寫io物件就會改變其狀態)
條件狀態
定義:可以被任何流類使用的一組標誌和函式,用來指定給定流是否可用。
io庫條件狀態
strm::iostate
strm是一種io型別,提供表達條件狀態的完整功能
strm::badbit
指出流已經崩潰
strm::failbit
指出乙個io操作失敗了
strm::eofbit
用來指出流已經到達檔案尾
strm::goodbit
用來指出流位處於錯誤狀態
s.eof()
若流s, eofbit置位,返回true
s.fail()
若流的failbit,bad置位,返回true
s.bad()
bad位置位,返回true
s.good()
若流處於有效狀態,返回true
s.clear()
將流s中所有條件狀態位復位,流的狀態設定為有效
s.clear(flag)
根據給定娥fl復位ags標誌位,將流s中對應條件狀態復位
s.setstate(flags)
根據給定娥fl復位ags標誌位,將流s中對應條件狀態置位
s.rdstate
返回流s的當前條件狀態,返回值型別位strm:iostate
輸出緩衝區
每個輸出流都管理乙個緩衝區,用來儲存程式讀寫的資料。
eg: os << "ok";
文字字串可能立即列印出來,但也有可能被作業系統儲存在緩衝區內,隨後再列印。
好處:裝置的寫操作很費時,如果作業系統將多個輸出操作組合為乙個單一的裝置寫操作可以帶來很大的效能提公升。
重新整理輸出緩衝區的操作
cout << "hi" << endl; //輸出乙個hi 換行 後重新整理
cout << "hi" << flush;//輸出 「hi」 後重新整理
cout << "hi" << ends;//輸出 「hi」 空字元 後重新整理
unitbuf
執行cout << unitbuf 所有輸出操作後都會立即重新整理緩衝區
執行cout << nounitbuf 回到正常的緩衝方式
關聯輸入和輸出流
當乙個輸入流被關聯道乙個輸出流是,任何試圖從輸入流讀取資料的操作都會先重新整理關聯的輸出流,標準庫講過cout和cin關聯在一起,因此下面的語句
cin >> ival;
導致cout的緩衝區被重新整理。
(互動式系統一你該關聯輸入輸出流。這意味著所有輸出,包括使用者提示資訊,都會在讀操作之前被列印出來)
檔案輸入輸出
標頭檔案fstream定義了三個型別支援檔案io:
ifstream從乙個給定檔案讀取資料
ofstream向乙個給定檔案寫入資料
fstream可以讀寫給定檔案
fstream特有的操作
fstream fstrm 建立乙個未繫結的檔案流,fstream是標頭檔案fstream中定義的乙個型別
fstream fstrm(s) 建立乙個fstream,並開啟名為s的檔案。s可以是string型別,或者是乙個指向c風格字串的指標。這些構造
函式都是explicit。
fstream fstrm(s, mode); 與前乙個建構函式類似,但按指定mode開啟檔案
fstrm.open(s) 開啟名為s的檔案,並將fstrm繫結。s可以是乙個string或乙個指向c風格字串的指標。預設的檔案mode
依賴於fstream的型別。返回void
fstrm.close() 關閉與fstrm繫結的檔案。返回void
fstrm.is_open() 返回乙個bool值,指出與fstrm關聯的檔案是否成功開啟且尚未關閉
使用檔案流物件
成員函式open和close
如果我們定義了乙個空檔案流物件,可以隨後呼叫open來將他與檔案關聯起來
ifstrem in(ifile); //構建乙個ifstream並開啟給定檔案
ofstream out; //輸出檔案未與任何檔案相關聯
out.open(ifile + ".copy"); //開啟指定檔案
一旦乙個檔案流已經開啟,他就保持對應檔案的關聯,實際上,對乙個已經開啟的檔案流呼叫open就會失敗,並會導致failbit被置位,隨後的試圖使用檔案流的操作都會失敗,。為了將檔案流關聯到另外乙個檔案,必須先關閉已經關聯的檔案。
in.close(); //關閉檔案
in.open(ifile + "2");
自動構造和析構
當乙個fstream物件被銷毀時,close會被自動呼叫。
c I O庫學習總結
i o流 流 是乙個位元組序列,指外部裝置和計算機記憶體之間流動的一系列位元組,裝置可以是控制台視窗 檔案等。輸入 讀 時,位元組從輸入裝置流向記憶體 輸出 寫 時,位元組從記憶體流向輸出裝置。i o類 序號標頭檔案 型別說明 1iostream istream 通用輸入流類,從流讀取資料 其他輸入...
c io庫條件狀態
badbit 用來指出流已經崩潰,屬於系統級錯誤,如不可恢復的讀寫錯誤。failbit 表示乙個io操作失敗了,比如讀取數字卻讀取的是字元,這是可以恢復的 eofbit 用來表示檔案達到檔案結尾,這也是可以恢復的 goodbit 表示流的狀態正常 注意的是,一但流發生錯誤,其上後續的io操作都會失敗...
c 學習筆記 c io
輸入輸出流 1.io物件要求能轉換成bool型別。對處於正常狀態的io物件轉成true,對處於錯誤狀態的io物件轉成false 2.處於錯誤狀態的io物件拒絕執行io操作,clear 清除錯誤狀態 不是清楚緩衝區 清除輸入緩衝區用.ignore 字元數,結束字元 這兩個版本都可以用第三個引數指定到用...