| 標志 | 含義 |
ios::in | 讀模式打開(ifstream 默認) |
ios::out | 寫模式打開(ofstream 默認),默認截斷文件 |
ios::app | 追加模式,寫入前定位到文件尾 |
ios::ate | 打開後定位到文件尾(可隨後隨機讀寫) |
ios::trunc | 若文件存在則清空(out 默認) |
ios::binary | 二進制模式(無換行符轉換) |
ios::nocreate | 文件不存在則失效 |
ios::noreplace | 文件存在則失效 |
組合方式: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 代碼的基石。
- 上一篇文章: HDU 4902 Nice Boat:線段樹區間更新維護區間最大最小值,支持賦值與 GCD 操作
- 下一篇文章: HDU 1166 敵兵布陣:線段樹單點更新與區間查詢詳解
Copyright ©
程式碼之家 All Rights Reserved