Files and Streams
File Error Checks
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
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;
}
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) {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=readystd::remove("present.txt");
25 std::remove("present.txt");26 return 0;27}
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) {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 defaultstd::remove("present.txt");
25 std::remove("present.txt");26 return 0;27}