A stream can be checked before reading so code can handle missing files safely.

stream state check An input stream converts to `true` when the file opened successfully and to `false` when it did not.

File Error Checks

filename
file_error_checks.cpp
Replay: real traced execution (multi-file project)
#include <cstdio>
#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::string filename = "present.txt";

    std::ofstream setup("present.txt");
    setup << "status=ready" << std::endl;
    setup.close();
    std::remove("missing.txt");

    std::ifstream input(filename);
    if (input) {
        std::string line;
        std::getline(input, line);
        std::cout << "opened=yes" << std::endl;
        std::cout << line << std::endl;
    } else {
        std::cout << "opened=no" << std::endl;
        std::cout << "fallback=use default" << std::endl;
    }

    std::remove("present.txt");
    return 0;
}
#include <cstdio>
#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::string filename = "missing.txt";

    std::ofstream setup("present.txt");
    setup << "status=ready" << std::endl;
    setup.close();
    std::remove("missing.txt");

    std::ifstream input(filename);
    if (input) {
        std::string line;
        std::getline(input, line);
        std::cout << "opened=yes" << std::endl;
        std::cout << line << std::endl;
    } else {
        std::cout << "opened=no" << std::endl;
        std::cout << "fallback=use default" << std::endl;
    }

    std::remove("present.txt");
    return 0;
}
  1. filename ← present.txt, setup ← (empty), input ← (empty)

    6int main() {7    std::string filename→ present.txt = "present.txt"; //@filename="missing.txt"89    std::ofstream setup→ (empty)("present.txt");10    setup(empty) << "status=ready" << std::endl;11    setup(empty).close();12    std::remove("missing.txt");1314    std::ifstream input→ (empty)(filenamepresent.txt);15    if (input) {
  2. line ← (empty)

    14std::ifstream input(filename);15if (input(empty)) {16    std::string line→ (empty);17    std::getline(input(empty), line→ status=ready);18    std::cout << "opened=yes" << std::endl;19    std::cout << linestatus=ready << std::endl;20} else {
    outputopened=yes
    status=ready
  3. std::remove("present.txt");

    25    std::remove("present.txt");26    return 0;27}
  1. filename ← missing.txt, setup ← (empty), input ← (empty)

    6int main() {7    std::string filename→ missing.txt = "missing.txt";89    std::ofstream setup→ (empty)("present.txt");10    setup(empty) << "status=ready" << std::endl;11    setup(empty).close();12    std::remove("missing.txt");1314    std::ifstream input→ (empty)(filenamemissing.txt);15    if (input) {
  2. else

    19    std::cout << line << std::endl;20} else {21    std::cout << "opened=no" << std::endl;22    std::cout << "fallback=use default" << std::endl;23}
    outputopened=no
    fallback=use default
  3. std::remove("present.txt");

    25    std::remove("present.txt");26    return 0;27}