C 的IO流的函式

2021-09-06 02:17:43 字數 3187 閱讀 9267

一.輸出檔案流成員函式

ios::ate 開啟乙個現存盤案(用於輸入或輸出)並查詢到結尾

ofstream ofile("filename",ios::out);//與上一句等效

乙個輸出檔案流儲存乙個內部指標指出下一次寫資料的位置。seekp成員函式設定這個指標,因此可以以隨機方式向磁碟檔案輸出。tellp成員函式返回該檔案位置指標值。

5.輸出流的close函式  

close成員函式關閉與乙個輸出檔案流關聯的磁碟檔案。檔案使用完畢後必須將其關閉以完成所有磁碟輸出。雖然ofstream析構函式(destructor)會自動完成關閉,但如果需要在同一流物件上開啟另外的檔案,就需要使用close函式。    

如果建構函式或open成員函式開啟了該檔案,輸出流析構函式自動關閉乙個流的檔案。

6.錯誤處理函式

錯誤處理成員函式的作用是在寫到乙個流時進行錯誤處理。各函式及其功能如下表所示。    

錯誤處理成員函式及其功能

函  數 功能及返回值

bad 如果出現乙個不可恢復的錯誤,則返回乙個非0值

fail 如果出現乙個不可恢復的錯誤或乙個預期的條件,例如乙個轉換錯誤或檔案未找到,用返回乙個非0值。在用零參量呼叫clear之後可能經常恢復處理

good 如果沒有錯誤條件(不可恢復的或其他)和沒有設定檔案結尾標誌,則返回乙個非0值

eof 遇到檔案結尾條件,則返回乙個非0值

clear 設定內部錯誤狀態,如果用預設參量呼叫,則清除所有錯誤位

rdstate 返回當前錯誤狀態

! 運算子經過了過載,它與fail函式執行相同的功能,因此表示式if(! cout)等價於 if (cout.fail())。

void*()運算子也是經過過載的,與!運算子相反,因此表示式if(cout)等價於if(! cout.fail())。

void*()運算子不等價於good,因為它不檢測檔案結尾。

(四)二進位制輸出檔案

最初設計流的目的是用於文字,因此預設的輸出模式是文字方式。在以文字模式輸出時,若遇到換行符(十進位制10),便自動被擴充為回車換行符(十進位制13)。這種自動擴充有時可能出問題,請看下列程式:

#i nclude

int iarray[2]=;

void main()

當執行程式,向檔案中輸出時,10會被自動轉換成13,然而這裡的轉換顯然不是我們需要的。要想解決這一問題,就要採用二進位制模式輸出。使用二進位制模式輸出時,其中所寫的字元是不轉換的。使用二進位制模式輸出到檔案有下列幾種方法,

(1)以通常方式構造乙個流,然後使用setmode成員函式,在檔案開啟後改變模式,例如:

ofstream ofs("test.dat");

ofs.setmode(filebuf::binary);

ofs.write((char*)iarray,4);    //向二進位制檔案中寫入4位元組資料

(2)使用ofstream建構函式中的模式參量指定二進位制輸出模式,例如:

#i nclude

#i nclude

#i nclude

int iarray[2]=;

void main()

(3)使用二進位制操作符代替setmode成員函式:

ofs《二.輸入流成員函式

輸**成員函式用於從磁碟檔案中輸入,這些成員函式包括:

•open函式    

•get函式    

•getline函式

•read函式    

•seekg和tellg函式

•close函式    

1.輸入流的open函式

如果要使用乙個輸入檔案流(ifstream),必須在建構函式中或者使用open函式把該流與乙個特定磁碟檔案關聯起來。無論哪種方式,參量是相同的。

當開啟與乙個輸入流關聯的檔案時,通常要指定乙個模式標誌。模式標誌如下表所示,該標誌可以用按位or(|)運算子進行組合。

表  輸入檔案流檔案開啟模式

ios::in    開啟檔案用於輸入(預設)

ios::nocreate   如果檔案不存在,該函式失敗

ios::binary 以二進位制模式(預設模式是文字模式)開啟檔案

注意:如果需要測試檔案是否存在,必須在開啟檔案時指定ios::nocreate模式,然後使用fail成員函式確定:

istream ifile("filename",ios::nocreate);

if (ifile.fail())

//the file does not exist...

2.get函式    

非格式化get函式的功能與提取運算子(>>)很相像,主要的不同點是get函式在讀人資料時包括空白字元,而提取運算子在預設情況下拒絕接受空白字元。

例  get函式應用舉例

#i nclude

void main()    

執行時如果輸入:

abc  xyz  123

則輸出:

abc  xyz  123

3.getline函式

getline成員函式的功能是允許從輸**中讀取多個字元,並且允許指定輸入終止字元(預設值是換行字元),在讀取完成後,從讀取的內容中刪除該終止字元。

例   為輸入流指定乙個終止字元

本程式連續讀人一串字元,直到遇到字元『t』時停止,字元個數最多不超過99個。

#i nclude

void main()

employee;

ifstream is("payroll",ios::binary|ios::nocreate);

if (is)

}    

else

}    

6.輸入流的close函式

close成員函式關閉與乙個輸入檔案流關聯的磁碟檔案。

雖然ifstream類的析構函式可以自動關閉檔案,但是如果需要使用同一流物件開啟另一檔案,則首先要用close函式關閉當前檔案。

四、輸入/輸出流

乙個iostream物件可以是資料的源或目的。兩個重要的i/o流類都是從iostream派生的,它們是fstream和strstream。這些類繼承了前面描述的stream和ostream類的功能。

fstream類支援磁碟檔案的輸入和輸出。如果你需要在同乙個程式中從乙個特定磁碟檔案讀和寫到該磁碟檔案,可以構造乙個fstream物件。乙個istream物件是有兩個邏輯子流的單個流,兩個子流乙個用於輸入,另乙個用於輸出。詳細說明請讀者參考聯機幫助或執行庫參考手冊

C 流的概念 I O流

流是位元組序列的抽象概念,如檔案 輸入 輸出裝置 內部程序通訊管道 tcp ip套接字等。stream類是所有流的抽象基類,它可以為流提供一般性檢視,從而使得開發人員不需要了解i o裝置的具體細節。與流相關的操作包括以下3個基本操作。讀取流 即讀取流中的內容。寫入流 即將指定的內容寫入到流中。流支援...

c 的IO流 檔案流物件

1 c語言的輸入輸出 c語言常用scanf 從標準輸入讀取資料,並將其存放至變數 printf 將指定文字 字串輸出到標準輸出裝置,設定輸出寬度和精度 輸入輸出緩衝區 1 遮蔽低階io實現 2 可實現行讀取 2 c 的io流 1 流,是是對一種有序連續且具有方向性的資料 其單位可以bit,byte,...

C 中的I O流筆記

位元組流可以是任何在記憶體儲存的資訊。cin是類istream的物件,cout是類ostream的物件。和 能自動識別輸入輸出型別。過載插入和抽取運算子的過載只能用友元函式形式過載,因為這些物件不是自定義的。過載函式格式 ostream operator ostream stream,const 類...