tags:

views:

86

answers:

6

Hi All, I'm trying to write console data into a separate text file in cpp. Anybody help me with sample code.

+6  A: 

There are various ways to do this. You could redirect it from the command line with programname > out.txt. Or you could use freopen("out.txt","w",stdout); at the start of your program.

A: 

If you want to create a child process and redirect its output you could do something like this:

FILE* filePtr = popen("mycmd");
FILE* outputPtr = fopen("myfile.txt");

if(filePtr && outputPtr) {
    char tmp;
    while((tmp = getc(filePtr)) != EOF)
        putc(tmp, outputPtr);

    pclose(filePtr);
    fclose(outputPtr);
}
domachine
only relevant with pthreads...
shoosh
+1  A: 

If you want to write from your own process, I'd suggest a simple print method

void print(const string str, ostream & output)
{
    output << str;
}

Then you can call

print("Print this", cout);

for console output, or

ofstream filestream("filename.out");
print("Print this", filestream);

to write into a file "filename.out". Of course you gain most, if print is a class method that outputs all the object's specific information you need and this way you can direct the output easily to different streams.

bbtrb
The `print` function you defined has almost no benefit. You can just as easily write `cout << "Print this";` for you first example and `filestream << "Print this";" in the second example. Unless `print` add some extra logic (perhaps writing a timestamp or perhaps writing to standard output and a file), there is no benefit to such a function.
R Samuel Klatchko
A: 

It's really easy.

Let's say you want to write the output of "ipconfig" to a file "My IP Info.txt"

Start -> Run -> cmd.exe

cd Desktop
ipconfig.exe > "My IP Info.txt"
exit
Computer Guru
A: 

bbtrb wrote:

void print(const string str, ostream & output) { output << str; }

Better than this is of course

ostream& output(ostream& out, string str) {out << str; return out;}

so that you can even have the manipulated output stream returned by the function.

Hossein HAERI
A: 

smerrimans answer should help you out.

There is also the option to implement your own streambuf and use it with std::cout and std::cerr to store printouts to file instead of printing to console. I did that a while ago to redirect printouts to some sort of rotating logs with timestamps.

You will need to read up a little bit on how it works and this book helped me get it right.

If that's not what you're after it is a bit of overkill though.

Mattias Nilsson