简体   繁体   中英

How to write console output to a text file in cpp?

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

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.

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.

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);
}

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.

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.

Create file -> redirect input into file

#include <iostream>
#include <fstream>
#include <string>

int main()
{
    std::string file_name;
    std::string str;
  
    std::cout << "Add file name:";
    std::cin >> file_name;

    std::cout << "Open file:" << file_name << std::endl;

    std::ofstream oFile(file_name);

    if (!oFile) {
        std::cout << "ERROR: we can't open file:" << file_name << std::endl;
        return 1;
    }
    else {
        std::cout << "File is open: " << oFile.is_open() << std::endl;
    }

    std::cout << "Enter you sentence into file:\n";
    getline(std::cin >> std::ws, str);
    oFile << str;
    oFile.close();


    return 0;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM