1. 程式人生 > >檔案流讀寫問題彙總

檔案流讀寫問題彙總

      序:工作遇見檔案流問題,查閱網上資料,這篇文章較好,儲存以便後續查閱;

 1.流的三種形態(均是char組成的,流物件不支援複製操作,因此不能儲存在vector 物件中):

【1】控制檯流物件-  istream - ostream -iostream;

【2】檔案流物件----  fstream -ifstream,ofstream;

【3】字串流物件-  stringstream-istringstream-ostringstream;

2.流物件的條件狀態:由於記錄讀寫過程中是否發生錯誤,其型別為iostate, 常用的有三種取值:

【1】badbit: 系統發生不可修復錯誤

【2】failbit: 此流錯誤可修復

【3】eofbit: 達到檔案末尾

3.成員函式用於獲取或設定其條件狀態:

.bad(), s.fail(), s.eof(), 若以上三個函式返回值都為false, s.good()返回true, 此外

s.clear(): 將條件重設為有效狀態

s.setstate(): 設定某個條件狀態,以表示某個問題的發生

s.rdstate(): 返回一個 iostate 型別值,該值對應於流當前的整個條件狀態

4.流物件使用細節:

       每個流物件管理一個輸出緩衝區,執行輸出操作時先將資料輸出到輸出緩衝區中,要重新整理緩衝區才能將資料寫入到真是的輸出裝置或檔案,有以下幾種方法可以重新整理緩衝區:

【1】 程式正常結束。作為 main 返回工作的一部分,將清空所有輸出緩衝區。

【2】在一些不確定的時候,緩衝區可能已經滿了,在這種情況下,緩衝區將會在寫下一個值之前重新整理。

【3】用操縱符顯式地重新整理緩衝區,例如行結束符 endl。

【4】在每次輸出操作執行完後,用 unitbuf 操作符設定流的內部狀態,從而清空緩衝區。

【5】可將輸出流與輸入流關聯(tie)起來。在這種情況下,在讀輸入流時將重新整理其關聯的輸出緩衝區(常用在互動式系統下,確保給使用者的提示在讀取使用者的輸入之前都已輸出)。