CodeToLive

File Handling in C++

C++ provides the fstream library for file handling, which includes classes like ifstream, ofstream, and fstream for reading from and writing to files. File handling is essential for storing and retrieving data persistently.

Opening a File

Use the ifstream class to open a file in read mode. Always check if the file was successfully opened using the is_open() method.


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

int main() {
  std::ifstream file("example.txt");
  if (!file.is_open()) {
    std::cerr << "Error opening file!" << std::endl;
    return 1;
  }

  std::string line;
  while (std::getline(file, line)) {
    std::cout << line << std::endl;
  }

  file.close();
  return 0;
}
      

Writing to a File

Use the ofstream class to open a file in write mode. If the file does not exist, it will be created. If it exists, its contents will be overwritten.


#include <iostream>
#include <fstream>

int main() {
  std::ofstream file("example.txt");
  if (!file.is_open()) {
    std::cerr << "Error opening file!" << std::endl;
    return 1;
  }

  file << "Hello, C++!" << std::endl;
  file.close();
  return 0;
}
      

Appending to a File

Use the ofstream class with the std::ios::app mode to append to a file. This mode ensures that new data is added to the end of the file without overwriting existing content.


#include <iostream>
#include <fstream>

int main() {
  std::ofstream file("example.txt", std::ios::app);
  if (!file.is_open()) {
    std::cerr << "Error opening file!" << std::endl;
    return 1;
  }

  file << "Appending this line!" << std::endl;
  file.close();
  return 0;
}
      

Reading and Writing Binary Files

Use the fstream class with std::ios::binary mode to handle binary files. Binary files are useful for storing complex data structures like objects.


#include <iostream>
#include <fstream>

int main() {
  // Writing to a binary file
  std::ofstream outFile("example.bin", std::ios::binary);
  int data = 12345;
  outFile.write(reinterpret_cast<char*>(&data), sizeof(data));
  outFile.close();

  // Reading from a binary file
  std::ifstream inFile("example.bin", std::ios::binary);
  int readData;
  inFile.read(reinterpret_cast<char*>(&readData), sizeof(readData));
  inFile.close();

  std::cout << "Read data: " << readData << std::endl;
  return 0;
}
      

File Modes

C++ provides several file modes that can be combined using the bitwise OR operator (|). Common modes include:


#include <iostream>
#include <fstream>

int main() {
  std::fstream file("example.txt", std::ios::in | std::ios::out | std::ios::app);
  if (!file.is_open()) {
    std::cerr << "Error opening file!" << std::endl;
    return 1;
  }

  file << "This line is appended." << std::endl;
  file.close();
  return 0;
}
      

Error Handling

Always check for errors when working with files. Use the is_open() method to verify if the file was successfully opened. Additionally, you can use the fail(), bad(), and eof() methods to handle specific error conditions.


#include <iostream>
#include <fstream>

int main() {
  std::ifstream file("nonexistent.txt");
  if (!file.is_open()) {
    std::cerr << "Error: File not found!" << std::endl;
    return 1;
  }

  std::string line;
  while (std::getline(file, line)) {
    std::cout << line << std::endl;
  }

  if (file.fail() && !file.eof()) {
    std::cerr << "Error reading file!" << std::endl;
  }

  file.close();
  return 0;
}
      

Best Practices

Next: Control Structures in C++