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
相关产品推荐
相关产品推荐

