You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++写入文件仅保存最后一行,如何实现全部内容正常写入?

问题根因

代码在逐行读取的while循环内部重复创建ofstream对象打开目标文件,ofstream默认的打开模式为ios::out | ios::trunc,每次打开都会清空文件已有内容,因此前序循环写入的内容都会被后一次的打开操作覆盖清空,最终仅保留最后一次循环写入的最后一行内容。同时原代码写入时没有补充换行符,即使内容全部写入也会出现所有行拼接在一起的问题。

修复代码(最优方案)

将输出文件的打开、关闭操作移到循环外部,全程只打开一次输出文件,逐行写入内容时补充换行符即可:

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <cctype>
#include <array>
using namespace std;

int main(){
    string nname;
    cout << "Enter new name for file" << endl; // 提示用户输入新文件名
    cin >> nname;
    fstream myFile;
    myFile.open("example.txt", ios::in); // 打开待读取的源文件
    if (myFile.is_open()){ 
        cout << "Is open now" << endl << endl; 
        string text;
        // 输出文件仅打开一次,放在循环外部
        ofstream outfile(nname);
        while(getline(myFile, text,'\n')) // 逐行读取源文件内容
        {
            cout << text << endl;
            // 写入内容时补充换行符,保留原文件的换行格式
            outfile << text << '\n';
        }
        // 循环结束后再关闭输出文件
        outfile.close();
        myFile.close();
    }
    
    return 0;
}
可选(不推荐)方案

如果确实需要在循环内部打开文件,可在打开时指定追加模式ios::app,避免清空已有内容,但该方案会频繁触发文件IO操作,运行效率远低于上述最优方案:

ofstream outfile(nname, ios::app);

内容的提问来源于stack exchange,提问作者AZERUL BIN BADRUL ISHAM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:54:09