Чтение и запись файлов
Консоль удобна для коротких опытов, но данные испытаний часто хранятся в файлах. Например, в data.txt лежат измерения, а программа должна записать отчёт в out.txt.
Для работы с файлами подключают <fstream>. ifstream читает файл почти как cin, а ofstream записывает файл почти как cout.
Запись в файл
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream file("out.txt");
file << "Start" << endl;
file << 123 << endl;
file.close();
cout << "done" << endl;
return 0;
}
После запуска рядом с программой появится файл out.txt.
Чтение из файла
Создайте файл data.txt:
10 20 30
Программа:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream file("data.txt");
int a = 0;
int b = 0;
int c = 0;
file >> a >> b >> c;
cout << a << endl;
cout << b << endl;
cout << c << endl;
return 0;
}
Оператор >> работает похоже на cin.
Проверка открытия
Файл может отсутствовать или лежать не в той папке. Поэтому проверяем открытие:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream file("data.txt");
if (!file) {
cout << "file error" << endl;
return 1;
}
cout << "file ok" << endl;
return 0;
}
Если программа пишет file error, проверьте имя файла и рабочую папку запуска.
Чтение нескольких чисел через цикл
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream file("data.txt");
int x = 0;
int sum = 0;
if (!file) {
cout << "file error" << endl;
return 1;
}
while (file >> x) {
sum = sum + x;
}
cout << sum << endl;
return 0;
}
Цикл продолжается, пока из файла удаётся прочитать очередное число.
Чтение и запись вместе
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream in("data.txt");
ofstream out("out.txt");
int x = 0;
int sum = 0;
if (!in || !out) {
cout << "file error" << endl;
return 1;
}
while (in >> x) {
sum = sum + x;
}
out << "sum = " << sum << endl;
cout << "done" << endl;
return 0;
}
Практика
- Запишите в
out.txtдве строки на английском. - Создайте
data.txtс тремя числами и прочитайте их. - Проверьте поведение программы, если
data.txtудалить. - Посчитайте сумму всех чисел из файла.
- Запишите результат в
out.txt.
Проверьте себя
- Какая библиотека нужна для файлов?
- Чем
ifstreamпохож наcin? - Чем
ofstreamпохож наcout? - Почему нужно проверять открытие файла?
- Что означает условие
while (file >> x)?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
| Термин | Значение |
|---|---|
| файл | данные на диске |
| txt-файл | текстовый файл |
ifstream | поток чтения из файла |
ofstream | поток записи в файл |
| рабочая папка | место, где программа ищет файл по короткому имени |
Связанные темы
- Ввод и вывод —
cinиcout. - Циклы — чтение повторяющихся данных.
- Параметры командной строки — передача имени файла при запуске.
Источники
- Microsoft Learn. File streams: https://learn.microsoft.com/en-us/cpp/standard-library/file-streams
- C++ reference. File-based streams: https://en.cppreference.com/w/cpp/io/basic_fstream