2012-02-17 180 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; 
} 
相關問題