首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ ofstream 追加寫入失效:未調用 close() 與相對路徑陷阱

     編輯:程式設計綜合問答

現象

ofstream app("zay.txt", ofstream::app);
app << "1121";
// 程序結束,打開文件發現內容未變化或寫在開頭

原因

  1. 緩衝區未刷新:析構時自動 close() 會刷新,但若程序異常退出或文件句柄未釋放,數據留在內存。
  2. 工作目錄不一致:IDE 運行時工作目錄可能是項目根目錄,雙擊 EXE 時是 EXE 所在目錄,導致打開的不是同一個文件。

修正

ofstream app;
app.open("C:\\full\\path\\zay.txt", ios::app | ios::out);
if (app) {
    app << "1121";
    app.flush(); // 立即刷新
    app.close(); // 顯式關閉
}

最佳實踐

  • 始終使用**絕對路徑**或通過 GetModuleFileName 獲取 EXE 目錄拼接。
  • RAII:構造函數打開,析構函數自動關閉,異常安全。
  • 關鍵日誌每行 flush() 或設置 app << unitbuf(每次輸出刷新)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved