Чтение файлов с 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 — локальная установка не требуется.
Все уроки этого курса
- Чтение файлов с ifstream
- Запись файлов с ofstream
- Двоичный ввод-вывод файлов
- Обработка ошибок и состояние