檔案流讀寫問題彙總
序:工作遇見檔案流問題,查閱網上資料,這篇文章較好,儲存以便後續查閱;
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)起來。在這種情況下,在讀輸入流時將重新整理其關聯的輸出緩衝區(常用在互動式系統下,確保給使用者的提示在讀取使用者的輸入之前都已輸出)。