我正在尝试将标准输出的某些重定向到文本文件,并将其他重定向到命令提示符。
我正在将所有内容输出到一个文件中,但是我想输出一些到命令提示符,所以我至少可以知道(得到一些点击),记录的内容(因为它需要10分钟运行此代码)
这就是我正在做的事情;
FILE *stream ;
std::stringstream ss;
ss << "K_file.txt";
if((stream = freopen(ss.str().c_str(), "w", stdout)) == NULL)
exit(-1);
std::cout<<"blah blah blah...";
根据评论进行编辑;
'some'是我想明确指定的代码的一部分,例如;
for(int i = 0; i<1000; i++)
{
std::cout<<"I would like this to go to the file - since it's detailed";
}
std::cout<<"loop finished - I would like this to go to the command prompt";
这可能不是最好的例子,但我希望你明白这一点。
答案 0 :(得分:3)
您可以“滥用”标准输出和标准错误流。例如:
#include <iostream>
void main() {
std::cout << "standard output";
std::cerr << "standard error";
}
现在,如果您redirect 只是要归档的标准错误...
your_program.exe 2> file.txt
...您将在控制台窗口中获得“标准输出”,并在file.txt
中获得“标准错误”。
(注意:这是Windows重定向语法 - 如果需要,我确信您可以毫不费力地在其他操作系统上进行重定向。)
答案 1 :(得分:2)
我认为这可能会有所帮助:
#include <fstream>
#include <iostream>
class stream_redirector {
public:
stream_redirector(std::ostream& dst, std::ostream& src)
: src(src), sbuf(src.rdbuf())
{
src.rdbuf(dst.rdbuf());
}
~stream_redirector() {
src.rdbuf(sbuf);
}
private:
std::ostream& src;
std::streambuf* const sbuf;
};
int main() {
std::ofstream log("log.txt");
std::cout << "Written to console." << std::endl;
{
// We redirect std::cout to log.
stream_redirector redirect(log, std::cout);
std::cout << "Written to log file" << std::endl;
// When this scope ends, the destructor will undo the redirection.
}
std::cout << "Also written to console." << std::endl;
}