2012-02-17 157 views
0

我正在尝试将的一些的标准输出转换为文本文件,并将的一些其他转换为命令提示符。我正在输出它所有的文件,但我想输出一些命令提示符,所以我至少可以知道(得到一些命中),什么是记录(因为它需要像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'是我希望明确指定的代码的一部分,example;

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"; 

这可能不是最好的例子,但我希望你明白这一点。

+2

定义“一些” .. – 2012-02-17 20:07:03

+0

我不知道我明白这里的实际问题。 – 2012-02-17 20:09:49

+3

你为什么不打开一个'ofstream',并用它来做你想要的文件? – 2012-02-17 20:14:24

回答

3

你可以“滥用”标准输出和标准错误流了点。例如:现在

#include <iostream> 

void main() { 
    std::cout << "standard output"; 
    std::cerr << "standard error"; 
} 

,如果你redirect只是标准错误文件...

your_program.exe 2> file.txt 

...你会得到在控制台窗口中的“标准输出”和“标准错误“在file.txt

(注:这是由于Windows重定向语法 - 我敢肯定,你就能毫不费力做其他操作系统重定向如果需要)。

+0

我不明白这比单纯打开'ofstream'更具优势。 – 2012-02-17 20:19:56

+0

@OliCharlesworth您可以在写入文件和控制台之间进行混合搭配,而无需更改程序。这是否重要是另一回事;) – 2012-02-17 20:25:39

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; 
} 
相关问题