Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Writing ALL program output to a txt file in C++

Tags:

c++

file-io

I need to write all my program output to a text file. I believe it's done this way,

sOutFile << stdout;

where sOutFile is the ofstream object that creates the file like this:

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

When I insert the stdout into the sOutFile object, I get some code which seems to resemble octal [hexadecimal] code or an address of some kind in the text file that I created.

0x77c5fca0

But what's confusing to me is that in my program I use cout several times. Mostly just literal statement. If I'm not mistaken that is the program output.

If this code is an address, would it contain all of my output? Could I read it back in to the program and find out that way?

What can I do to get ALL of my program output written to a text file?

like image 248
user40120 Avatar asked Feb 22 '09 07:02

user40120


People also ask

How do you create a text file in C?

To create a file in a 'C' program following syntax is used, FILE *fp; fp = fopen ("file_name", "mode"); In the above syntax, the file is a data structure which is defined in the standard library. fopen is a standard function which is used to open a file.

How do you create read and write to a file in C programming?

For reading and writing to a text file, we use the functions fprintf() and fscanf(). They are just the file versions of printf() and scanf() . The only difference is that fprintf() and fscanf() expects a pointer to the structure FILE.

How is a file used in C to write data into a file?

1) Create a variable to represent the file. 2) Open the file and store this "file" with the file variable. 3) Use the fprintf or fscanf functions to write/read from the file.


4 Answers

If your program already uses cout/printf and you want to send EVERYTHING you currently output to a file, you could simply redirect stdout to point to a file before your existing calls: http://support.microsoft.com/kb/58667

Relevant Code:

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

Alternatively if you just want Some things to be printed to a file, you just want a regular file output stream: http://www.cplusplus.com/doc/tutorial/files.html

Relevant Code:

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

EDIT to aggregate answers from John T and Brian Bondy:
Finally, if you're running it from the commandline, you can just redirect the output as everyone else mentioned by using the redirect operator ">" or append ">>":

myProg > stdout.txt 2> stderr.txt
like image 165
Andrew Coleson Avatar answered Oct 16 '22 03:10

Andrew Coleson


This is a duplicate of: this question

You can redirect stdout, stderr and stdin using std::freopen.

From the above link:

/* 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;
}

You can also run your program via command prompt like so:

a.exe > stdout.txt 2> stderr.txt
like image 23
Brian R. Bondy Avatar answered Oct 16 '22 03:10

Brian R. Bondy


If you want all output in a text file you don't need to code anything extra.

from the command line:

program > output.txt

If you only wish to redirect certain output you can use ostream as dirkgently suggested.

like image 28
John T Avatar answered Oct 16 '22 03:10

John T


Then you cannot use std::cout anywhere else to print stuff from your program. Change std::cout to a std::ostream and then pass your file or std::cout as required.

like image 3
dirkgently Avatar answered Oct 16 '22 04:10

dirkgently