Работа с файлами C++

Уровень сложности: 

Файлы в C++ представляют собой потоки данных, работа с которыми похожа на работу с обычным потоком ввода-вывода. Работа с файлами выполняется операторами чтения и записи в поток: << для записи и >> для чтения. При определении файлов нужно использовать специальные типы данных: fstream, ifstream, ofstream - а также открывать файлы в правильном режиме.

Потоковые типы данных C++

Файлы - это объекты, которые определяются следующими классами, или типами данных:

  • ifstream - тип потока для чтения из файла (расшифровка: Input File STREAM),
  • ofstream - тип потока для записи в файл (output file stream)
  • fstream - тип потока для работы с файлом в обоих режимах: чтения и записи.

Для использования этих типов данных нужно подключить библиотеки iostream, fstream.

 

Чтение из файла

  1. Описать переменную типа ifstream
  2. Открыть файл в режиме чтения, указав имя
  3. Получить данные из потока (считать из файла)
  4. Закрыть файл

 

Запись в файл

  1. Описать переменную типа ofstream
  2. Открыть файл в режиме записи, указав имя
  3. Отправить данные в поток (переменную, указывающую на файл)
  4. Закрыть файл (обязательно)

 

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

  1. Описать переменную типа fstream
  2. Открыть файл в режиме чтения, указав имя
  3. Принимать данные из потока
  4. Закрыть файл (обязательно)
  5. Открыть файл в режиме записи
  6. Отправлять данные
  7. Закрыть файл
  8. Повторять эти действия, в порядке сначала одно действие, потом закрытие файла, открытие заново в другом режиме, выполнение другого действия, закрытие.

 

Режимы работы с файлами:

  • ios::in — открыть файл в режиме чтения данных; режим является режимом по умолчанию для потоков ifstream;
  • ios::out — открыть файл в режиме записи данных (при этом информация о существующем файле уничтожается); режим является режимом по умолчанию для потоков ofstream;
  • ios::app — открыть файл в режиме записи данных в конец файла;
  • ios::ate — передвинуться в конец уже открытого файла;
  • ios::trunc — очистить файл, это же происходит в режиме ios::out;
  • ios::nocreate — не выполнять операцию открытия файла, если он не существует;
  • ios::noreplace — не открывать существующий файл.

 

Пример записи в файл представлен в следующем коде с комментариями.
Программа предлагает указать количество чисел для ввода и последовательно запрашивает числа и записывает в файл accounts.txt. В результате в папке программы будет создан файл или перезаписан.

  1. #include <iostream>
  2. #include <fstream> //для работы с файлами
  3. #include <iomanip>
  4. using namespace std;
  5. int main()
  6. {
  7. int i, n;
  8. double a;
  9. ofstream f; //описывает поток для записи данных в файл
  10.  
  11. cout << "Программа запись в файл";
  12. f.open("accounts.txt", ios::out); //открываем файл в режиме записи, ios::out - устанавливается по умолчанию
  13. cout<<"n="; cin>>n; //вводим количество вещественных чисел
  14. //цикл ввода вещественных чисел
  15. for (i=0; i<n; i++) {
  16. cout<<"a=";
  17. cin>>a;
  18. f<<a<<"\t";
  19. }
  20. f.close(); //закрытие потока
  21. re