C IO庫學習篇

2021-08-28 18:41:42 字數 3068 閱讀 9514

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 字元數,結束字元 這兩個版本都可以用第三個引數指定到用...