Title here
Summary here
Our first example demonstrates reading files in C++. Reading and writing files are basic tasks needed for many C++ programs. Let’s look at some examples of reading files.
#include <iostream>
#include <fstream>
#include <vector>
#include <stdexcept>
// Helper function to check for errors
void check(bool condition, const std::string& message) {
if (!condition) {
throw std::runtime_error(message);
}
}
int main() {
// Perhaps the most basic file reading task is
// slurping a file's entire contents into memory.
std::ifstream file("/tmp/dat");
check(file.is_open(), "Failed to open file");
std::string content((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
std::cout << content;
// You'll often want more control over how and what
// parts of a file are read. For these tasks, we can use
// various methods of std::ifstream.
file.clear();
file.seekg(0, std::ios::beg);
// Read some bytes from the beginning of the file.
// Allow up to 5 to be read but also note how many
// actually were read.
std::vector<char> b1(5);
file.read(b1.data(), 5);
int n1 = file.gcount();
std::cout << n1 << " bytes: " << std::string(b1.begin(), b1.begin() + n1) << "\n";
// You can also seek to a known location in the file
// and read from there.
file.seekg(6, std::ios::beg);
std::vector<char> b2(2);
file.read(b2.data(), 2);
int n2 = file.gcount();
std::cout << n2 << " bytes @ 6: " << std::string(b2.begin(), b2.begin() + n2) << "\n";
// Other methods of seeking are relative to the
// current position or the end of the file.
file.seekg(4, std::ios::cur);
file.seekg(-10, std::ios::end);
// The C++ standard library provides some functions that may
// be helpful for file reading. For example, we can use
// std::getline to read a line from the file.
file.seekg(6, std::ios::beg);
std::string line;
std::getline(file, line);
std::cout << line.length() << " bytes @ 6: " << line << "\n";
// There is no built-in rewind, but
// seekg(0, std::ios::beg) accomplishes this.
file.seekg(0, std::ios::beg);
// The C++ standard library also provides a buffered reader
// in the form of std::istream. It's already being used by
// std::ifstream, so we don't need to create a separate one.
char b4[5];
file.read(b4, 5);
std::cout << "5 bytes: " << std::string(b4, 5) << "\n";
// Close the file when you're done (this is done automatically
// when the std::ifstream object goes out of scope).
file.close();
return 0;
}
To run this program, you would first need to create a file at /tmp/dat
with some content. Then compile and run the C++ program:
$ echo "hello" > /tmp/dat
$ echo "cpp" >> /tmp/dat
$ g++ reading-files.cpp -o reading-files
$ ./reading-files
hello
cpp
5 bytes: hello
2 bytes @ 6: cp
2 bytes @ 6: cpp
5 bytes: hello
This example demonstrates various ways to read files in C++, including reading the entire file at once, reading specific portions, seeking to different positions, and using buffered reading. The C++ standard library provides powerful tools for file I/O through the <fstream>
header.
Next, we’ll look at writing files in C++.