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

如何在文件开头写入内容且不覆盖原有文本?

在文件开头写入新内容的解决方案

fstream::app(追加模式)的特性就是强制将写入位置定位到文件末尾,所以没法直接用它在文件开头插入内容。要实现需求,得通过以下两种常见方式:

方法一:内存中转(适合小文件)

先把原文件的全部内容读到内存里,再以覆盖模式打开文件,先写入新文本,再追加原内容:

#include <fstream>
#include <string>
#include <sstream>

int main() {
    // 读取原文件内容到内存
    std::ifstream in("file.txt");
    std::stringstream contentBuf;
    contentBuf << in.rdbuf();
    std::string originalContent = contentBuf.str();
    in.close();

    // 写入新内容+原内容
    std::ofstream out("file.txt");
    if (out.is_open()) {
        out << "new text\n" << originalContent;
        out.close();
    }
    return 0;
}

方法二:临时文件中转(适合大文件)

如果文件太大,全部读进内存占用过高,可以用临时文件过渡:

  1. 创建临时文件,先写入新文本
  2. 把原文件的内容逐行(或逐块)复制到临时文件
  3. 删除原文件,将临时文件重命名为原文件名

示例代码(简化版):

#include <fstream>
#include <string>
#include <cstdio> // 用于remove和rename

int main() {
    // 创建临时文件并写入新内容
    std::ofstream tempOut("temp_file.txt");
    tempOut << "new text\n";
    tempOut.close();

    // 复制原文件内容到临时文件
    std::ifstream in("file.txt");
    std::ofstream tempAppend("temp_file.txt", std::ios::app);
    std::string line;
    while (std::getline(in, line)) {
        tempAppend << line << "\n";
    }
    in.close();
    tempAppend.close();

    // 替换原文件
    std::remove("file.txt");
    std::rename("temp_file.txt", "file.txt");
    return 0;
}

注意:处理大文件时,逐块读写比逐行更高效;另外要做好异常处理,比如文件打开失败、重命名失败等情况。

内容的提问来源于stack exchange,提问作者Faizan_u_Haq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:25:50