#include // include iostream so we can do std::cin, std::cout, and std::cerr #include // include fstream so we can do file input and output. int main(int argc, char* argv[]){ if(argc!=3){ std::cout << "Usage: ./a.out input.txt output.txt" << std::endl; exit(1); } // store the first argument in inputFileName, as a C++ string std::string inputFileName = std::string(argv[1]); // but we can't just use that string to open a file, we have to create an std::ifstream object. std::ifstream inputFile(inputFileName); // this is how we actually open the input file. if (!inputFile.is_open()) { // if the file can't be opened, we print an error message. std::cerr << "Failed to open the input file." << std::endl; exit(1); } // store the second argument in outputFileName, as a C++ string std::string outputFileName = std::string(argv[2]); // but we can't just use that string to open a file, we have to create an std::ofstream object. std::ofstream outputFile(outputFileName); // this is how we actually open the output file. if (!outputFile.is_open()) { // if the file can't be opened, we print an error message. std::cerr << "Failed to open the output file." << std::endl; exit(1); } std::string line; // read the input file one line each time, and store the content of that one line into this string variable line. // The getline function returns the input stream (inputFile in this case), // and the loop condition while(getline(inputFile, line)) checks whether the stream is in a good state. // If getline successfully reads a line from inputFile, // it returns the stream (inputFile) which evaluates to true in a boolean context. // If getline encounters the end-of-file (EOF) while reading, it sets the end-of-file flag on the stream, // and the next attempt to read from the stream will fail. // in this case, getline returns the stream in a boolean context, which evaluates to false. while(getline(inputFile, line)){ // print that one line to the console std::cout << line << std::endl; // print again, but this time print it to a file. outputFile << line << std::endl; } // after using the files, close them before exit the program. inputFile.close(); outputFile.close(); return 0; }