2009-02-22 111 views
7

我需要将所有程序输出写入文本文件。我相信这是做这种方式,将所有程序输出写入C++中的txt文件

sOutFile << stdout; 

其中sOutFile是创建这样的文件ofstream的对象:

sOutFile("CreateAFile.txt"); // CreateAFile.txt is created. 

当我插入标准输出到sOutFile对象,我得到了一些代码,这似乎在我创建的文本文件中类似于八进制 [十六进制]代码或某种类型的地址。

0x77c5fca0 

但是,让我感到困惑的是,在我的程序中,我多次使用cout。大部分只是字面上的陈述。如果我没有错,那是程序输出。

如果这段代码是一个地址,它是否会包含我所有的输出?我可以将它读回程序并找出那种方式吗?

我该怎么做才能让我的所有程序输出写入文本文件?

+0

我认为,创建该文件的说法应该是“ofstream的sOutFile(” CreateAFile.txt“);”。对? – 2009-02-22 08:01:58

回答

7

这是一个重复:this question

您可以重定向使用std::freopen标准输出,标准错误和标准输入。

从上面的链接:

/* freopen example: redirecting stdout */ 
#include <stdio.h> 

int main() 
{ 
    freopen ("myfile.txt","w",stdout); 
    printf ("This sentence is redirected to a file."); 
    fclose (stdout); 
    return 0; 
} 

您可以通过命令提示符下,像这样还运行程序:

a.exe > stdout.txt 2> stderr.txt 
6

如果你想在一个文本文件中输出所有内容,你不需要额外编写任何代码。

命令行:

program > output.txt 

如果你只是想重定向一定的输出,你可以使用的ostream作为dirkgently建议。

15

如果你的程序已经使用COUT/printf和你想要的一切,你现在输出发送到一个文件,你可以简单地将stdout您现有的电话前指向一个文件: http://support.microsoft.com/kb/58667

相关代码:

freopen("file.txt", "w", stdout); 
cout << "hello file world\n"; // goes to file.txt 
freopen("CON", "w", stdout); 
printf("Hello again, console\n"); // redirected back to the console 

或者如果你只是想有些事情要打印到文件,你只想要一个普通的文件输出流:http://www.cplusplus.com/doc/tutorial/files.html

相关代码:

ofstream myfile; 
myfile.open("file.txt"); 
myfile << "Hello file world.\n"; 
printf("Hello console.\n"); 
myfile.close(); 

编辑从约翰·T和布莱恩·邦迪总的答案:
最后,如果你从命令行运行它,你可以将输出重定向通过使用重定向操作其他每个人都提到“>”或追加“>>”:

myProg > stdout.txt 2> stderr.txt 
+0

附加呃...似乎是每个人都在用我的答案来做。 +1为你的努力,虽然。 – 2009-02-22 08:06:11

3

然后,您不能在任何地方使用std :: cout从您的程序打印内容。将std :: cout更改为std :: ostream,然后根据需要传递您的文件或std :: cout。

3
sOutFile << stdout; 

in C“stdout”定义为FILE*变量。这只是一个指针。将它输出到文件只是将指针的值写入文件中:0x77c5fca0

如果您想要将输出指向文件,请首先将其写入文件,或使用命令行将程序的输出重定向至文件。