Перейти к основному содержимому

Чтение и запись файлов

Программа читает txt-файл и записывает результат в другой txt-файл

Консоль удобна для коротких опытов, но данные испытаний часто хранятся в файлах. Например, в 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.

cin/cout и файловые потоки устроены похоже

Проверка открытия

Файл может отсутствовать или лежать не в той папке. Поэтому проверяем открытие:

#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;
}

Практика

  1. Запишите в out.txt две строки на английском.
  2. Создайте data.txt с тремя числами и прочитайте их.
  3. Проверьте поведение программы, если data.txt удалить.
  4. Посчитайте сумму всех чисел из файла.
  5. Запишите результат в out.txt.

Проверьте себя

  1. Какая библиотека нужна для файлов?
  2. Чем ifstream похож на cin?
  3. Чем ofstream похож на cout?
  4. Почему нужно проверять открытие файла?
  5. Что означает условие while (file >> x)?
Ориентиры для самопроверки

Сначала ответьте без подсказки. Ответ можно считать полным, если вы:

  • формулируете основную мысль своими словами;
  • называете важные условия, ограничения или меры безопасности;
  • для схемы, кода или расчёта показываете ход решения и ожидаемый результат.

Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.

Словарь статьи

ТерминЗначение
файлданные на диске
txt-файлтекстовый файл
ifstreamпоток чтения из файла
ofstreamпоток записи в файл
рабочая папкаместо, где программа ищет файл по короткому имени

Связанные темы

Источники