文件重定向
文件重定向
掌握文件操作中的重定向。
重定向让程序从文件读入数据,或把输出写到文件,而不必每次改代码里的文件名。竞赛与 GESP 环境常用:在源程序同目录放输入文件,通过重定向把标准输入/输出接到文件。具体语法因操作系统或评测机说明而异,读题时以题目给出的方式为准。
四级概念题会问:重定向后 cin/cout 是否仍可用(通常可以,只是背后连到文件)、程序本身是否必须包含 fstream(重定向 stdin/stdout 时往往不必)。与「用 C++ 代码打开文件」是互补能力:一个靠运行参数或外部配置,一个靠 ifstream/ofstream。
理解「标准流可以被接到文件」这一层,就足够应对四级对重定向的考查。
下面哪种方式不能实现将字符串"Welcome to GESP!"输出重定向到文件 log.txt ( )。
原文保真说明:原卷印刷错误 1 处(照原卷保留,未作修改)
原卷印刷如此错字选项 4 · 第 6 行
原卷作
cout.rdbuf(oorg_cout);,常规写法应为cout.rdbuf(org_cout);原卷印作 oorg_cout,比第 2 行声明的 org_cout 多一个 o(图像与文本层一致),照原卷转写。
下面哪种方式不能实现将字符串 "Happy Spring!" 输出重定向到文件 log.txt ( )。
下面哪种方式不能实现将字符串 Welcome to 2026! 输出重定向到文件 log.txt( )。
A.
freopen("log.txt", "w", stdout);
cout << "Welcome to 2026!" << endl;
fclose(stdout);
B.
std::ofstream outFile("log.txt");
cout << "Welcome to 2026!" << endl;
outFile.close();
C.
ofstream log_file("log.txt");
streambuf* org_cout = cout.rdbuf();
cout.rdbuf(log_file.rdbuf());
cout << "Welcome to 2026!" << endl;
cout.rdbuf(org_cout);
D.
std::ofstream outFile("log.txt");
outFile << "Welcome to 2026!" << endl;
outFile.close();
假设文件 output.txt 能正常打开,下面代码通过 rdbuf 将 cout 的输出重定向到了文件中。
ofstream fout("output.txt");
streambuf* old_buf = cout.rdbuf();
cout.rdbuf(fout.rdbuf());
cout << "GESP Exam";
cout.rdbuf(old_buf);