ofstream outfile; // 1. 宣告物件
outfile.open("f1.dat", ios::out); // 2. 關聯檔案、指定模式
ofstream outfile("f1.dat", ios::out);
| 旗標 | 含義 |
|---|---|
ios::in | 輸入模式開啟 |
ios::out | 輸出模式(預設),截斷既有檔案 |
ios::app | 輸出模式,資料追加至檔案尾 |
ios::ate | 開啟既有檔案,指標直指檔尾 |
ios::trunc | 截斷既有檔案(配合 out 為預設行為) |
ios::binary | 二進位模式(預設為文字模式) |
ios::nocreate | 僅開啟既有檔案,不建立新檔(舊標準,新版已移除) |
ios::noreplace | 檔案不存在才建立,存在則失敗(舊標準,新版已移除) |
|禁忌:不可組合互斥旗標(如
nocreate | noreplace)。錯誤檢測:務必驗證開啟結果
ofstream outfile("f1.dat", ios::app); if (!outfile) { // 或 outfile.fail() cerr << "開啟失敗!" << endl; exit(1); // 或 abort() }建構函式失敗時,物件轉型為
false;open()失敗回傳 0。關閉檔案與重複利用流物件
outfile.close(); // 解除關聯、釋放資源、刷新緩衝區 outfile.open("f2.dat", ios::app | ios::nocreate); // 同一物件關聯新檔案檔案指標初始位置規則
ios::out / ios::trunc:指標指向檔案開頭(內容被清空)ios::app:指標固定在檔尾,每次寫入自動移至末尾ios::ate:指標初始在檔尾,但可自由移動ios::in:指標在檔頭讀寫每處理一個位元組,指標後移一位;遇 EOF(-1)則 eof() 回傳真值。
掌握模式旗標組合、嚴謹檢查開啟狀態、善用 close() 釋放資源並重複利用流物件,是穩健檔案 I/O 程式的基石。新標準下建議摒棄 nocreate/noreplace,改用檔案系統層面檢查(std::filesystem::exists C++17)替代。