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

C++通过用户输入打开指定txt文件的程序异常排查

解决文件名校验循环及文件内容同步问题

原代码的核心问题

  • 未做文件名白名单校验:只要输入的文件名能被系统创建/打开(比如jaguar.txt这类不存在的文件会被自动创建),程序就会提示打开成功,完全没限制必须是test.txt
  • 无循环重试逻辑:错误输入后仅重新获取一次文件名就终止程序,无法持续提示直到输入正确
  • 未实现文件内容同步:原代码只是往打开的文件写入字符串test.txt,完全没完成“将一个文件内容同步到另一个文件”的需求

修正后的代码

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
    string filename;
    // 循环获取文件名,直到输入合法值
    while (true) {
        cout << "请输入数据文件名: ";
        cin >> filename;

        // 强制校验文件名必须为test.txt
        if (filename != "test.txt") {
            cout << "错误:仅允许输入'test.txt',请重新输入。" << endl;
            continue;
        }

        // 打开源文件(读取模式)
        ifstream source(filename);
        if (!source.is_open()) {
            cout << "无法打开'" << filename << "',请确认文件存在后重试。" << endl;
            continue;
        }

        // 这里假设目标文件为copy_test.txt,可根据需求修改文件名
        ofstream target("copy_test.txt");
        if (!target.is_open()) {
            cout << "无法创建目标文件'copy_test.txt'。" << endl;
            source.close();
            return 1;
        }

        // 逐行复制文件内容
        string line;
        while (getline(source, line)) {
            target << line << '\n';
        }

        // 关闭文件资源
        source.close();
        target.close();

        cout << "操作成功!'" << filename << "'的内容已同步到'copy_test.txt'。" << endl;
        break; // 完成任务后退出循环
    }

    return 0;
}

关键修改点

  • 强制文件名校验:在循环中优先判断输入是否为test.txt,不符合直接提示错误并重新输入
  • 持续循环重试:用while(true)包裹整个流程,直到用户输入合法文件名且文件操作成功才退出
  • 实现文件内容同步:通过ifstream读取源文件内容,逐行写入目标文件,完成内容一致的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:36:30