首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 輸入輸出與文件操作完全指南:流、緩衝區、格式控制與異常處理

     編輯:C++ 入門

C++ 輸入輸出與文件操作完全指南

一、流與緩衝區核心概念

  • 流:數據在內存與設備(文件、控制台、網絡)間流動的抽象。
  • 緩衝區:內存中一塊區域,作為數據中轉站。讀取:設備→緩衝區→內存;寫入:內存→緩衝區→設備。
    緩衝區大幅減少昂貴的設備 I/O 次數,提高效率。

二、流類庫架構

streambuf(底層緩衝區操作)與 ios(用戶接口)為兩大基類。常用派生類:

  • istream(輸入)、ostream(輸出)、iostream(雙向)
  • ifstream、ofstream、fstream(文件流)
  • istringstream、ostringstream(字符串流)

三、文件打開模式詳解

組合方式:ios::in | ios::out | ios::binary。

四、文本與二進制讀寫

文本:>>/<<(格式化)、get()/put()(單字符)、getline()(整行)。
二進制:read((char*)&obj, sizeof(obj))、write((char*)&obj, sizeof(obj)),適用結構體/類對象直接存取。

五、格式控制

頭文件 <iomanip>:
setw(w) 寬度、setfill(c) 填充字符、setprecision(p) 精度、
left/right 對齊、fixed/scientific 浮點格式、hex/oct/dec 進制。
狀態標志操作:setiosflags()、resetiosflags()。

六、文件異常處理與隨機訪問

  • 判斷打開失敗:if (!fs)、if (fs.fail())、if (!fs.good())、if (!fs.is_open())(推薦)。
  • 隨機訪問:seekg(pos)/seekp(pos) 移動讀/寫指針,tellg()/tellp() 獲取當前位置。
  • 關閉:fs.close(),析構函數會自動調用。

七、完整示例:文本複製與二進制結構體存取

// 文本複製
ifstream in("src.txt"); ofstream out("dst.txt");
char c; while (in.get(c)) out.put(c);

// 二進制結構體數組存取
struct Student { int id; char name[20]; float score; };
Student stu[3] = {{1,"Alice",92.5},{2,"Bob",87.0},{3,"Carol",95.5}};
ofstream bin("stu.dat", ios::binary);
bin.write((char*)stu, sizeof(stu));
bin.close();
ifstream binIn("stu.dat", ios::binary);
Student tmp; while (binIn.read((char*)&tmp, sizeof(tmp))) { /* process */ }

掌握流機制、緩衝區原理、格式控制與異常處理,是編寫健壯、高效 C++ I/O 代碼的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
標志含義
ios::in讀模式打開(ifstream 默認)
ios::out寫模式打開(ofstream 默認),默認截斷文件
ios::app追加模式,寫入前定位到文件尾
ios::ate打開後定位到文件尾(可隨後隨機讀寫)
ios::trunc若文件存在則清空(out 默認)
ios::binary二進制模式(無換行符轉換)
ios::nocreate文件不存在則失效
ios::noreplace文件存在則失效