0Pricing
C++ Academy · Урок

Чтение файлов с ifstream

Читайте текст и данные

«Чтение файлов с ifstream» — бесплатный урок C++ Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Что такое входной файловый поток

std::ifstream (входной файловый поток) считывает данные из файлов. Он работает подобно std::cin, но его источником является файл на диске.

  • Определён в <fstream>.
  • Открывает файл по имени в своём конструкторе.
#include <iostream>
#include <fstream>

int main() {
    std::ofstream("demo.txt") << "hello\n";
    std::ifstream in("demo.txt");
    std::string word;
    in >> word;
    std::cout << word << '\n';
    return 0;
}

Открытие файла

Создайте ifstream, указав имя файла, а затем с помощью is_open() проверьте, найден ли файл.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("data.txt") << "42\n";
    std::ifstream in("data.txt");
    std::cout << (in.is_open() ? "opened" : "failed") << '\n';
    return 0;
}

Чтение слов

Оператор >> считывает разделённые пробелами токены, так же как при работе с cin.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("words.txt") << "alpha beta gamma\n";
    std::ifstream in("words.txt");
    std::string w;
    while (in >> w) std::cout << w << '\n';
    return 0;
}

Чтение чисел

Числовые типы можно извлекать непосредственно. Извлечение из потока разбирает текст и преобразует его в нужный тип.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("nums.txt") << "10 20 30\n";
    std::ifstream in("nums.txt");
    int sum = 0, x;
    while (in >> x) sum += x;
    std::cout << "sum = " << sum << '\n';
    return 0;
}

Чтение строк с помощью getline

Используйте std::getline(), чтобы считать всю строку вместе с пробелами до символа новой строки.

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ofstream("lines.txt") << "first line\nsecond line\n";
    std::ifstream in("lines.txt");
    std::string line;
    while (std::getline(in, line)) std::cout << "[" << line << "]\n";
    return 0;
}

Чтение всего файла

Чтобы целиком загрузить файл, считайте его в строку с помощью итераторов буфера потока.

#include <iostream>
#include <fstream>
#include <sstream>

int main() {
    std::ofstream("all.txt") << "line1\nline2\n";
    std::ifstream in("all.txt");
    std::stringstream ss;
    ss << in.rdbuf();
    std::cout << ss.str();
    return 0;
}

Определение конца файла

Цикл read завершается, когда извлечение завершается неудачей, обычно при достижении конца файла. Проверка потока в условии позволяет обнаружить это.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("eof.txt") << "1 2 3\n";
    std::ifstream in("eof.txt");
    int x, count = 0;
    while (in >> x) ++count;
    std::cout << "read " << count << " numbers\n";
    std::cout << "eof: " << std::boolalpha << in.eof() << '\n';
    return 0;
}

Обработка отсутствующего файла

Если файл не существует, поток переходит в состояние fail, а is_open() возвращает значение false. Всегда выполняйте проверку перед чтением.

#include <iostream>
#include <fstream>

int main() {
    std::ifstream in("does_not_exist_12345.txt");
    if (!in) {
        std::cout << "could not open file\n";
    }
    return 0;
}

Разбор структурированных строк

Объедините getline с istringstream, чтобы извлекать поля из каждой строки.

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

int main() {
    std::ofstream("people.txt") << "Alice 30\nBob 25\n";
    std::ifstream in("people.txt");
    std::string line;
    while (std::getline(in, line)) {
        std::istringstream ss(line);
        std::string name; int age;
        ss >> name >> age;
        std::cout << name << " is " << age << '\n';
    }
    return 0;
}

Явные open и close

Поток, созданный конструктором по умолчанию, можно позднее открыть с помощью open() и освободить с помощью close().

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("oc.txt") << "data\n";
    std::ifstream in;
    in.open("oc.txt");
    std::string s; in >> s;
    in.close();
    std::cout << s << '\n';
    return 0;
}

RAII закрывает поток за Вас

Когда объект ifstream выходит из области видимости, его деструктор автоматически закрывает файл. Ручной вызов close() требуется редко.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("raii.txt") << "x\n";
    {
        std::ifstream in("raii.txt");
        std::string s; in >> s;
        std::cout << s << '\n';
    } // file closed here automatically
    std::cout << "closed\n";
    return 0;
}

Быстрая проверка

Проверьте, насколько хорошо Вы понимаете чтение строк.

Итоги

Вы узнали, что std::ifstream:

  • считывает данные из файлов с помощью >> и std::getline
  • должен проверяться с помощью is_open() или посредством проверки самого потока
  • автоматически закрывается благодаря RAII при выходе из области видимости

Далее Вы научитесь записывать файлы с помощью ofstream.

Часто задаваемые вопросы

Урок «Чтение файлов с ifstream» бесплатный?

Да — полный текст урока «Чтение файлов с ifstream» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Чтение файлов с ifstream»?

Читайте текст и данные Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Чтение файлов с ifstream»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Чтение файлов с ifstream
  2. Запись файлов с ofstream
  3. Двоичный ввод-вывод файлов
  4. Обработка ошибок и состояние
← Назад к C++ Academy