โ๏ธ C++ Reading and Writing Files โ Text and Binary I/O Made Simple
๐งฒ Introduction โ Why File I/O Is Crucial in C++
C++ provides powerful tools for performing file input and output (I/O), allowing programs to persist data between executions. Whether you’re building a text editor, logger, or a binary data processor, understanding how to read from and write to files is essential.
๐ฏ In this guide, youโll learn:
- How to read and write text files
- How to perform binary file I/O
- Stream-based I/O using
ifstream
,ofstream
, andfstream
- Best practices for efficient and safe file handling
๐ Text File I/O โ Line and Word-Based Operations
โ Writing to a Text File
#include <fstream>
using namespace std;
int main() {
ofstream out("data.txt");
out << "Name: John" << endl;
out << "Age: 25" << endl;
out.close();
return 0;
}
โ Reading from a Text File (Line-by-Line)
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {
ifstream in("data.txt");
string line;
while (getline(in, line)) {
cout << line << endl;
}
in.close();
return 0;
}
โ Reading Word-by-Word
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {
ifstream file("data.txt");
string word;
while (file >> word) {
cout << word << endl;
}
file.close();
return 0;
}
๐พ Binary File I/O โ Byte-Level Reading & Writing
Binary mode preserves the raw byte structure of data, ideal for writing objects or non-text files.
โ Writing Binary Data
#include <fstream>
using namespace std;
struct Record {
int id;
float score;
};
int main() {
Record r = {1, 95.5f};
ofstream out("record.bin", ios::binary);
out.write((char*)&r, sizeof(r));
out.close();
return 0;
}
โ Reading Binary Data
#include <fstream>
#include <iostream>
using namespace std;
struct Record {
int id;
float score;
};
int main() {
Record r;
ifstream in("record.bin", ios::binary);
in.read((char*)&r, sizeof(r));
cout << "ID: " << r.id << ", Score: " << r.score << endl;
in.close();
return 0;
}
๐ Common File I/O Functions
Function | Purpose |
---|---|
.open() | Opens a file |
.close() | Closes the file |
.is_open() | Checks if file is successfully opened |
.eof() | Detects end of file |
getline() | Reads a line into a string |
>> and << | Stream insertion and extraction |
๐งช File Stream Modes Recap
Mode | Description |
---|---|
ios::in | Read mode |
ios::out | Write mode |
ios::app | Append to file |
ios::binary | Binary file mode |
ios::trunc | Truncate file if it exists |
๐ก Best Practices & Tips
๐ Always check .is_open()
before operating on a file
๐ฆ Use ios::app
to avoid overwriting content when appending
โ ๏ธ Don’t forget to .close()
files to free resources
๐ก Use binary I/O for speed and compact data formats
๐ ๏ธ Use Cases for Reading and Writing Files
๐ Logging Systems โ Write logs, errors, events
๐งพ Report Generation โ Store user data and system output
๐ฎ Save Games โ Load and save structured data
๐ Form-Based Apps โ Read/write formatted user input
๐ File Converters โ Convert between formats using line/byte parsing
๐ Summary โ Recap & Next Steps
๐ Key Takeaways:
- C++ supports both text and binary file I/O using file streams
- Use
ifstream
,ofstream
, andfstream
with the appropriate mode flags - Use
getline()
for line input and stream operators (>>
,<<
) for formatted data
โ๏ธ Real-World Relevance:
C++ file I/O is widely used in applications like loggers, report writers, data import/export utilities, and configuration-driven tools.
โ
Next Steps:
Explore C++ File Modes & Binary File Operations to control how files are accessed, opened, and processed.
โFAQ โ C++ Reading and Writing Files
โ What’s the difference between reading by >>
and getline()
?>>
stops at whitespace, while getline()
reads the full line including spaces.
โ Can I write both binary and text to the same file?
โ ๏ธ Not recommendedโuse one mode per file to avoid data corruption.
โ What happens if I read past EOF?
The stream enters a fail state, and no more data is read.
โ How do I overwrite vs append to a file?
Use ios::out
for overwrite, and ios::app
for append mode.
โ Should I always check for .is_open()
?
โ
Yes. It prevents undefined behavior and allows error reporting.
Share Now :