Файлы
std::filesystem и потоки: читаем и пишем данные
После урока ты сможешь
- Читать файл построчно и записывать результат
- Работать с путями через std::filesystem
- Корректно обрабатывать отсутствие файла
Шаг 1 из 7
Файл — это тоже поток
Работа с файлами в C++ устроена так же, как с std::cin и std::cout, только поток подключён не к клавиатуре, а к файлу. Всё нужное лежит в <fstream>:
std::ofstream— запись в файл (output file stream);std::ifstream— чтение из файла (input file stream).
#include <fstream>
#include <print>
#include <string>
int main() {
{
std::ofstream out("notes.txt");
out << "купить хлеб\n";
out << "позвонить маме\n";
std::println(out, "записать {} дела", 3); // println умеет писать в поток
} // out уничтожен — файл закрыт и записан на диск
std::ifstream in("notes.txt");
std::string line;
int number = 0;
while (std::getline(in, line)) {
std::println("{}. {}", ++number, line);
}
}
Всё, что ты знаешь про >>, getline и чтение в цикле, работает и с файлами. А закрывать файл вручную не нужно: деструктор потока сделает это сам. Это RAII.
Проверь себя
Программа пишет в std::ofstream out("a.txt") и сразу, не выходя из блока, читает этот файл через ifstream. Файл часто оказывается пустым. Почему?