w3resource

C++ File handling: Merge multiple text files

C++ File handling: Exercise-9 with Solution

Write a C++ program to merge multiple text files into a single file.

Sample Solution:

C Code:

#include <iostream>   // Including the input/output stream library
#include <fstream>    // Including the file stream library
#include <string>     // Including the string handling library
#include <vector>     // Including the vector container

// Function to display the content of a file
void displayFileContent(const std::string & filename) {
  std::ifstream file(filename); // Open file with given filename for reading
  std::string line; // Declare a string to store each line of text

  if (file.is_open()) { // Check if the file was successfully opened
    std::cout << "File content:" << std::endl; // Displaying a message indicating file content
    while (std::getline(file, line)) { // Read each line from the file
      std::cout << line << std::endl; // Display each line of the file
    }
    file.close(); // Close the file
  } else {
    std::cout << "Failed to open the file." << std::endl; // Display an error message if file opening failed
  }
}

int main() {
  std::vector<std::string> inputFiles = { // List of input files
    "test1.txt",
    "test2.txt",
    "test3.txt",
    "test4.txt"
  };
  std::cout << "Content of test1.txt, test2.txt, test3.txt, text4.txt: " << std::endl;

  displayFileContent("test1.txt"); // Display content of "test1.txt"
  displayFileContent("test2.txt"); // Display content of "test2.txt"
  displayFileContent("test3.txt"); // Display content of "test3.txt"
  displayFileContent("test4.txt"); // Display content of "test4.txt"

  std::string outputFile = "merged_test_file.txt"; // Output file

  std::ofstream mergedFile(outputFile); // Create or overwrite the output file named "merged_test_file.txt" for writing

  if (mergedFile.is_open()) { // Check if the output file was successfully opened
    for (const auto & inputFile: inputFiles) { // Iterate through each input file
      std::ifstream inputFileStream(inputFile); // Open each input file for reading

      if (inputFileStream.is_open()) { // Check if the input file was successfully opened
        std::string line; // Declare a string to store each line of text

        while (std::getline(inputFileStream, line)) { // Read each line from the input file
          mergedFile << line << "\n"; // Write each line to the merged file
        }

        inputFileStream.close(); // Close the input file
      } else {
        std::cout << "Failed to open input file: " << inputFile << std::endl; // Display an error message if file opening failed
      }
    }

    mergedFile.close(); // Close the merged file
    std::cout << "\nFiles merged successfully." << std::endl; // Display a success message
    std::cout << "\nContent of the merged file:" << std::endl;
    displayFileContent("merged_test_file.txt"); // Display content of "merged_test_file.txt"
  } else {
    std::cout << "Failed to open the output file." << std::endl; // Display an error message if output file opening failed
  }

  return 0; // Return 0 to indicate successful execution
}

Sample Output:

Content of test1.txt, test2.txt, test3.txt, text4.txt:
File content:
Many vendors provide C++ compilers, including the Free Software Foundation, LLVM, Microsoft, Intel, Embarcadero, Oracle, and IBM.
File content:
C++ is a high-level, general-purpose programming language created by Danish computer scientist Bjarne Stroustrup.
File content:
It is almost always implemented in a compiled language.
File content:
Modern C++ currently has object-oriented, generic, and functional features, in addition to facilities for low-level memory manipulation.
First released in 1985 as an extension of the C programming language, it has since expanded significantly over time.

Files merged successfully.

Content of the merged file:
File content:
Many vendors provide C++ compilers, including the Free Software Foundation, LLVM, Microsoft, Intel, Embarcadero, Oracle, and IBM.
C++ is a high-level, general-purpose programming language created by Danish computer scientist Bjarne Stroustrup.
It is almost always implemented in a compiled language.
Modern C++ currently has object-oriented, generic, and functional features, in addition to facilities for low-level memory manipulation.
First released in 1985 as an extension of the C programming language, it has since expanded significantly over time.

Explanation:

In the above exercise,

  • Define a vector inputFiles that contains the names of the input files to be merged.
  • Specify the output file name as a string outputFile.
  • The program uses an output file stream mergedFile to create or overwrite the output file.
  • Iterate over each input file in the inputFiles vector.
  • For each input file, open it using an input file stream inputFileStream.
  • If the input file is successfully opened, read each line from the input file using std::getline() and write it to the merged file using the output file stream mergedFile.
  • After merging all the files, close the merged file and display a success message.

Flowchart:

Flowchart: Merge multiple text files.

CPP Code Editor:

Contribute your code and comments through Disqus.

Previous C++ Exercise: Sort text file lines alphabetically.
Next C++ Exercise: Split a large text file.

What is the difficulty level of this exercise?



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/cpp-exercises/file-handling/cpp-file-handling-exercise-9.php