I'm trying to write console data into a separate text file in cpp. Anybody help me with sample code.
问题:
回答1:
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.
回答2:
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.
回答3:
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);
}
回答4:
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.
回答5:
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.