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

如何使用C++删除文本文件中的指定行?

解决文本文件指定行删除的问题

直接在原文件中删除某一行并不容易——因为文件系统的流式存储特性,没法直接修改中间的内容。常用的可靠做法是:把需要保留的内容写入临时文件,之后用临时文件替换原文件。

先指出你原代码里的几个问题:

  • 全局的std::fstream对象用ios::app | ios::in | ios::out打开,ios::app会强制所有写入操作追加到文件末尾,完全不符合修改文件内容的场景;
  • while (file.good())的判断逻辑有缺陷,应该直接用getline(file, line)作为循环条件,这样能正确处理读取结束的情况。

以下是修改后的完整代码,实现了删除指定行的功能:

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

int main()
{
    std::string line;
    int number;
    std::cout << "Enter the number: ";
    std::cin >> number;
    std::string target = std::to_string(number);

    // 打开原文件和临时文件
    std::ifstream inFile("havai.txt");
    std::ofstream outFile("havai_temp.txt");

    if (!inFile.is_open() || !outFile.is_open()) {
        std::cerr << "Failed to open files!" << std::endl;
        return 1;
    }

    // 遍历每一行,保留不需要删除的行
    while (getline(inFile, line)) {
        if (line != target) {
            outFile << line << std::endl;
        }
    }

    // 关闭文件
    inFile.close();
    outFile.close();

    // 删除原文件,将临时文件重命名为原文件名
    if (std::remove("havai.txt") != 0) {
        std::cerr << "Failed to delete original file!" << std::endl;
        return 1;
    }
    if (std::rename("havai_temp.txt", "havai.txt") != 0) {
        std::cerr << "Failed to rename temp file!" << std::endl;
        return 1;
    }

    std::cout << "Line deleted successfully!" << std::endl;
    return 0;
}

代码说明:

  • 用std::ifstream只读打开原文件,std::ofstream只写打开临时文件,规避了原打开方式的问题;
  • 循环读取每一行,只有当该行不等于目标内容时,才写入临时文件;
  • 操作完成后,关闭两个文件,删除原文件,再把临时文件改名为原文件的名字,完成替换;
  • 加入了文件打开、删除、重命名的错误判断,避免出现异常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:48:24