C++ I/O流重定向问题求助:如何实现CMD下文件读写重定向?
问题解决思路
你的核心误解是shell重定向的工作方式:program < file1 > file2里的<和>是操作系统负责的,不需要程序自己处理。< file1会把file1的内容定向到程序的标准输入(std::cin),> file2会把程序的标准输出(std::cout)直接写入file2。你代码里手动打开file2.txt的操作完全多余,反而破坏了重定向的逻辑。
具体修改点
- 删除所有和
std::ofstream相关的代码,包括头文件<fstream>(不再需要)。 - 把原本写入
output_file的内容直接输出到std::cout。 - 移除循环内重复打开/关闭文件的低效逻辑。
修改后的完整代码
#include <iostream> #include <string> int main() { std::string input_line; while (std::getline(std::cin, input_line)) { std::cout << input_line << std::endl; } return 0; }
额外说明
- 工作原理:
操作系统会接管所有重定向操作:执行program < file1 > file2时,std::cin的数据源自动变成file1,std::cout的输出目标自动变成file2,程序无需关心具体文件名,通用性更强。 - 原代码的其他问题:
- 硬编码文件名
file2.txt,无法满足用户自定义文件名的需求。 - 每次循环都打开/关闭文件,频繁IO操作会大幅降低运行效率。
- 使用
std::ios::app追加模式,和> file2的覆盖语义冲突。
- 硬编码文件名
内容的提问来源于stack exchange,提问作者emdez
相关产品推荐
相关产品推荐

