§ 10. Текстовые файлы

10.1. Команды для работы с текстовыми файлами

В настоящее время компьютеры обрабатывают огромные массивы больших данных, ввод таких данных с клавиатуры потребовал бы намного больше времени, чем их обработка. Поэтому в современных языках программирования предусмотрена возможность читать данные из файла и записывать результаты в файл. Один из самых простых форматов файлов — это текстовые файлы, которые хранят только символы из кодовой таблицы. Создавать и просматривать такие файлы можно с помощью программы Блокнот.

При работе с текстовыми файлами изменяется только формат ввода и вывода данных. Алгоритмическая составляющая процесса решения задачи не изменяется. Обычно с помощью программы Блокнот создается файл, содержащий входные данные — те, которые пользователь мог ввести с клавиатуры. По завершении работы программа выводит результат не в консоль, а в файл, который можно открыть в Блокноте. Сохраняются файлы в папке проекта (пример 10.1).

Чтобы программа могла работать с файлами, необходимо указать имена этих файлов и определить, для какой цели нужен файл — для ввода или для вывода.

Для работы с файлами используются специальные типы данных, называемые потоками. Поток ifstream служит для работы с файлами в режиме чтения (ввод данных). Поток ofstream служит для работы с файлами в режиме записи (вывод данных). В программах на C++ при работе с текстовыми файлами необходимо подключать библиотеку fstream (пример 10.2).

Пример 10.1. Файлы input.txt (для ввода данных) и output.txt (для вывода) в папке проекта.

Пример 10.2. Команды для работы с файлами:

#include <fstream>

 

using namespace std;

 

int main()

{

  ifstream fin("input.txt");

  ofstream fout("output.txt");

  …

  return 0;

}    

Команда ifstream fin("input.txt") связывает файловый поток с именем fin и текстовый файл input.txt, предназначенный для чтения данных из него. В программе имя файлового потока fin будет использоваться тогда, когда нужно ввести данные (по существу fin будет использоваться вместо cin).

Команда ofstream fout("output.txt") связывает файловый поток с именем fout и текстовый файл output.txt, предназначенный для записи данных в него. В программе имя файлового потока fout будет использоваться тогда, когда нужно вывести данные (по существу, fout будет использоваться вместо cout).

Имя файлового потока является идентификатором, пользователь может выбрать его произвольно.

Если необходимо работать с несколькими файлами одновременно, то каждый файл связывают со своим потоком для чтения или записи данных.

Если возникает необходимость сначала записать что-либо в файл, а затем прочитать из него, то нужно сначала закрыть поток для чтения и только потом связывать файл с потоком для записи. Для закрытия используется команда fin.close();