A Complete Guide - CPP Programming File Streams ifstream, ofstream, fstream

Last Updated: 03 Jul, 2025   
  YOU NEED ANY HELP? THEN SELECT ANY TEXT.

C++ Programming File Streams: ifstream, ofstream, fstream

C++ file streams are an integral part of the Input/Output (I/O) operations within the C++ Standard Library. They facilitate reading from and writing to files and other I/O sources like memory buffers. Among the file streams, ifstream, ofstream, and fstream are the most commonly used.

ifstream : File Input Stream

ifstream is used to read data from a file. It inherits from the istream class, which means it supports input operations similar to those performed on cin.

Constructors:

  • ifstream(); : Default constructor, creates an object but does not associate it with any file.
  • ifstream(const char* filename, ios_base::openmode mode = ios_base::in); : Opens a file with the provided filename and mode.

Opening a File:

To associate an ifstream object with a file, use the open() member function:

ifstream file;
file.open("example.txt", ios::in);

Checking if File is Open:

Always check whether the file opened successfully before proceeding with read operations.

if (!file) { cerr << "Error: Cannot open file."; return 1;
}

Reading from a File:

Read operations can be performed using various methods such as >>, getline(), or reading directly into a buffer.

int num;
string line; file >> num; // Reads integer
getline(file, line); // Reads line into string
char buffer[100];
file.read(buffer, 100); // Reads 100 characters into buffer

Closing the File:

It is good practice to explicitly close the file using the close() method.

file.close();

ofstream : File Output Stream

ofstream is used to write data to a file. It inherits from the ostream class, which means it supports output operations similar to those performed on cout.

Constructors:

  • ofstream(); : Default constructor, creates an object but does not associate it with any file.
  • ofstream(const char* filename, ios_base::openmode mode = ios_base::out); : Opens a file with the provided filename and mode.

Opening a File:

Use the open() member function to associate an ofstream object with a file.

ofstream file;
file.open("output.txt", ios::out | ios::app); // 'ios::app' appends to file

Writing to a File:

Write operations can be performed using various methods such as <<, or writing directly from a buffer.

int num = 42;
string text = "Hello, World!";
char buffer[100] = "Buffer text"; file << num << " " << text; // Writes integer and string to file
file.write(buffer, 100); // Writes 100 characters from buffer

Closing the File:

Use the close() method to explicitly close the file.

file.close();

fstream : File Stream

fstream allows bidirectional I/O operations (both reading and writing) on a file. It inherits from both istream and ostream classes.

Constructors:

  • fstream(); : Default constructor, creates an object but does not associate it with any file.
  • fstream(const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out); : Opens a file with the provided filename and mode.

Opening a File:

Associate an fstream object with a file using the open() member function.

fstream file;
file.open("data.txt", ios::in | ios::out | ios::trunc); // 'ios::trunc' truncates the file

Reading and Writing:

You can use read and write methods on the same object.

int number;
string msg = "Data"; file >> number; // Reads integer
file << msg; // Writes string

Seeking and Positioning:

fstream supports seeking within a file, allowing you to read from or write to specific positions.

file.seekg(10, ios::beg); // Moves input position to 10 bytes from beginning
file.seekp(0, ios::end); // Moves output position to the end of the file cout << "Current Position: " << file.tellg() << endl; // Retrieves current input position

Tip: Use ios::ate as a secondary mode to seek to the end of the file upon opening.

fstream file;
file.open("data.txt", ios::in | ios::out | ios::ate);
cout << "Size of file: " << file.tellg() << endl;

Closing the File:

Always close the file after operations are complete.

file.close();

Modes of Operation

When opening a file, you can specify one or more modes to control how the file is accessed. These modes can be combined using the bitwise OR operator (|).

  • ios::in : Open a file for reading.
  • ios::out : Open a file for writing. If the file exists, its content will be truncated.
  • ios::app : Open a file for writing and append to the end of the file.
  • ios::ate : Open a file and seek to the end immediately after opening.
  • ios::trunc : If the file already exists, truncate it to length 0.
  • ios::binary : Open a file in binary mode.

Error Handling

Always check if a file was opened successfully before performing operations. Use the good(), bad(), fail(), and eof() methods to handle errors effectively.

Conclusion

Online Code run

🔔 Note: Select your programming language to check or run code at

💻 Run Code Compiler

Step-by-Step Guide: How to Implement CPP Programming File Streams ifstream, ofstream, fstream

1. Writing to a File Using ofstream

ofstream is used to write data to a file.

Step-by-Step Example:

1. Include Necessary Headers:

#include <iostream>
#include <fstream>

2. Create and Open an Output File Stream:

int main() { // Create an ofstream object std::ofstream outFile; // Open the file for writing (or create it if it doesn't exist) outFile.open("example.txt"); // Check if the file was opened successfully if (!outFile) { std::cerr << "Error opening file for writing!" << std::endl; return 1; }

3. Write Data to the File:

 // Writing strings to the file outFile << "Hello, World!" << std::endl; outFile << "This is an example of using ofstream." << std::endl; // Writing numbers to the file int num = 42; double pi = 3.14159; outFile << "The answer is " << num << std::endl; outFile << "Value of pi is " << pi << std::endl;

4. Close the File Stream:

 // Close the file after writing outFile.close(); std::cout << "Data successfully written to example.txt" << std::endl; return 0;
}

Complete Code:

#include <iostream>
#include <fstream> int main() { std::ofstream outFile; outFile.open("example.txt"); if (!outFile) { std::cerr << "Error opening file for writing!" << std::endl; return 1; } outFile << "Hello, World!" << std::endl; outFile << "This is an example of using ofstream." << std::endl; int num = 42; double pi = 3.14159; outFile << "The answer is " << num << std::endl; outFile << "Value of pi is " << pi << std::endl; outFile.close(); std::cout << "Data successfully written to example.txt" << std::endl; return 0;
}

2. Reading from a File Using ifstream

ifstream is used to read data from a file.

Step-by-Step Example:

1. Include Necessary Headers:

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

2. Create and Open an Input File Stream:

int main() { // Create an ifstream object std::ifstream inFile; // Open the file for reading inFile.open("example.txt"); // Check if the file was opened successfully if (!inFile) { std::cerr << "Error opening file for reading!" << std::endl; return 1; }

3. Read Data from the File:

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

4. Close the File Stream:

 // Close the file after reading inFile.close(); std::cout << "Finished reading from file." << std::endl; return 0;
}

Complete Code:

#include <iostream>
#include <fstream>
#include <string> int main() { std::ifstream inFile; inFile.open("example.txt"); if (!inFile) { std::cerr << "Error opening file for reading!" << std::endl; return 1; } std::string line; while (getline(inFile, line)) { std::cout << "Read from file: " << line << std::endl; } inFile.close(); std::cout << "Finished reading from file." << std::endl; return 0;
}

3. Reading from and Writing to a File Using fstream

fstream is a combination of ifstream and ofstream and can be used to both read from and write to a file.

Step-by-Step Example:

1. Include Necessary Headers:

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

2. Create and Open a Bidirectional File Stream:

int main() { // Create an fstream object std::fstream file; // Open the file for both reading and writing, overwriting existing content file.open("example.txt", std::ios::in | std::ios::out | std::ios::trunc); if (!file) { std::cerr << "Error opening file!" << std::endl; return 1; }

3. Write Data to the File:

 file << "Hello, World!" << std::endl; file << "This is an example of using fstream." << std::endl; int num = 42; double pi = 3.14159; file << "The answer is " << num << std::endl; file << "Value of pi is " << pi << std::endl;

4. Set the Position to Read from the Beginning of the File:

 // Go back to the beginning of the file to read what we just wrote file.seekg(0, std::ios::beg);

5. Read Data from the File:

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

6. Close the File Stream:

 // Close the file after reading and writing file.close(); std::cout << "Finished reading and writing the file." << std::endl; return 0;
}

Complete Code:

#include <iostream>
#include <fstream>
#include <string> int main() { std::fstream file; file.open("example.txt", std::ios::in | std::ios::out | std::ios::trunc); if (!file) { std::cerr << "Error opening file!" << std::endl; return 1; } file << "Hello, World!" << std::endl; file << "This is an example of using fstream." << std::endl; int num = 42; double pi = 3.14159; file << "The answer is " << num << std::endl; file << "Value of pi is " << pi << std::endl; file.seekg(0, std::ios::beg); std::string line; while (getline(file, line)) { std::cout << "Read from file: " << line << std::endl; } file.close(); std::cout << "Finished reading and writing the file." << std::endl; return 0;
}

4. Appending to a File Instead of Overwriting It

Step-by-Step Example:

Using ofstream with std::ios::app flag to append to a file rather than overwrite it.

1. Include Necessary Headers:

#include <iostream>
#include <fstream>

2. Create and Open an Output File Stream in Append Mode:

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

3. Append Data to the File:

 outFile << "Appending more data to the file..." << std::endl; outFile << "More text here." << std::endl;

4. Close the File Stream:

 outFile.close(); std::cout << "Data successfully appended to example.txt" << std::endl; return 0;
}

Complete Code:

 YOU NEED ANY HELP? THEN SELECT ANY TEXT.

Top 10 Interview Questions & Answers on CPP Programming File Streams ifstream, ofstream, fstream

1. What are the primary differences between ifstream, ofstream, and fstream in C++?

  • ifstream (Input File Stream): Used for reading data from files. It is a derived class of istream.
  • ofstream (Output File Stream): Used for writing data to files. It is a derived class of ostream.
  • fstream (File Stream): Used for both reading and writing data. It is a derived class of iostream, providing functionality of both ifstream and ofstream.

2. How do you open a file in C++ using file streams?

You can open a file using the open() member function. Here’s an example:

ifstream inStream; // Input file stream
ofstream outStream; // Output file stream
fstream bothStream; // File stream for both reading and writing inStream.open("input.txt"); // Opens a file named "input.txt" for reading
outStream.open("output.txt"); // Opens a file named "output.txt" for writing
bothStream.open("file.txt"); // Opens a file named "file.txt" for both reading and writing

3. What are the mode flags available when opening a file with these streams?

Mode flags can be used to specify the mode in which the file opens. Common modes include:

  • ios::in: Open for input operations.
  • ios::out: Open for output operations.
  • ios::app: Append all the output operations at the end of the file. If the file does not exist, it is created.
  • ios::ate: Open the file for output operations and move the writing position to the end.
  • ios::trunc: If the file exists, truncate it to zero length.
  • ios::binary: Open the file in binary mode.

Example: Opening a file for both reading and appending:

fstream file;
file.open("data.txt", ios::in | ios::app);

4. How do you read from a file using ifstream?

To read from a file, you can use >> operator, getline(), or other extraction methods like read(). Here’s an example using >>:

ifstream inStream("data.txt");
int num;
string text;
if (inStream.is_open()) { inStream >> num; // Reads an integer inStream >> text; // Reads a string inStream.close();
}

5. How do you write to a file using ofstream?

To write to a file, use the << operator or write() for binary data. Here’s an example using <<:

ofstream outStream("output.txt");
if (outStream.is_open()) { outStream << 123; // Writes an integer outStream << "Hello"; // Writes a string outStream.close();
}

6. What is the difference between fstream::read() and fstream::getline()?

  • fstream::read(char* s, streamsize n): Reads n characters from the file into the array s. Useful for reading binary data.
  • fstream::getline(char* s, streamsize n, char delimiter): Reads up to n-1 characters from the file into the array s, until the delimiter is found or EOL (end-of-line) is reached. Often used with text data.

7. How do you check if a file stream is open and valid for operations?

You can use is_open() to check if a stream is open and good() to verify if it’s okay for reading or writing. Here’s an example:

ifstream inStream("data.txt");
if (inStream.is_open() && inStream.good()) { // Perform file operations safely
}

8. How can you handle exceptions when working with file streams in C++?

You can enable exception handling with exceptions() member function. Here’s an example:

ofstream outStream;
outStream.exceptions(ofstream::failbit | ofstream::badbit);
try { outStream.open("file.txt"); outStream << "This is a test";
} catch (const ofstream::failure& e) { cout << "Exception opening/reading/writing file";
}

9. What is the difference between eof() and fail() methods in file streams?

  • eof(): Returns true if the end-of-file is reached.
  • fail(): Returns true if the last operation failed. This includes reaching EOF, logical errors like format mismatches, and bad errors like system errors.

Example usage:

ifstream file("input.txt");
int num;
while (file >> num) { // Reading integers until EOF or failure // Process num
}
if (file.eof()) { cout << "Reached end of file.";
}
if (file.fail()) { cout << "An error occurred.";
}

10. How do you flush the output buffer in file streams?

You can use flush() to flush the output buffer. Alternatively, you can use endl which not only inserts a newline character but also flushes the buffer. Here’s an example:

You May Like This Related .NET Topic

Login to post a comment.