C++ Робота з файлами: як відкривати, писати, читати, закривати файли C++

Що таке обробка файлів C++?

Файли постійно зберігають дані на пристрої зберігання. За допомогою обробки файлів вихідні дані програми можна зберігати у файлі. У файлі над даними можна виконувати різні операції.

Потік — це абстракція пристрою, де виконуються операції введення/виведення. Ви можете представити потік або як пункт призначення, або як джерело символів невизначеної довжини. Це визначатиметься їх використанням. C++ надає вам бібліотеку з методами обробки файлів. Давайте обговоримо це.

Бібліотека fstream

Бібліотека fstream надає C++ програмісти з трьома класами для роботи з файлами. Ці класи включають:

  • ofstream– Цей клас представляє вихідний потік. Він використовується для створення файлів і запису інформації у файли.
  • ifstream– Цей клас представляє вхідний потік. Він використовується для читання інформації з файлів даних.
  • fstream– Цей клас зазвичай представляє потік файлів. Він поставляється з можливостями ofstream/ifstream. Це означає, що він здатний створювати файли, записувати файли, читати файли даних.

На наступному зображенні це легко зрозуміти:

бібліотека fstream
бібліотека fstream

Щоб використовувати наведені вище класи бібліотеки fstream, ви повинні включити її у свою програму як файл заголовка. Звичайно, ви будете використовувати директиву препроцесора #include. Ви також повинні включити файл заголовка iostream.

Як відкривати файли

Перш ніж виконувати будь-яку операцію з файлом, його необхідно відкрити. Якщо вам потрібно записати файл, відкрийте його за допомогою об’єктів fstream або ofstream. Якщо вам потрібно лише прочитати файл, відкрийте його за допомогою об’єкта ifstream.

Три об’єкти, тобто fstream, ofstream і ifstream, мають визначену функцію open(). Синтаксис функції:

open (file_name, mode);
  • Параметр file_name позначає назву файлу, який потрібно відкрити.
  • Параметр mode необов'язковий. Він може приймати будь-яке з наступних значень:
значення Опис
ios:: додаток Режим додавання. Вихідні дані, надіслані до файлу, додаються до нього.
ios::ate Він відкриває файл для виведення, а потім переміщує елементи керування читанням і записом у кінець файлу.
ios::in Він відкриває файл для читання.
ios::out Він відкриває файл для запису.
ios::trunc Якщо файл існує, елементи файлу слід скоротити перед його відкриттям.

Є можливість використовувати два режими одночасно. Ви об’єднуєте їх за допомогою | (OR) оператор.

Приклад 1:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file", ios::out);
	if (!my_file) {
		cout << "File not created!";
	}
	else {
		cout << "File created successfully!";
		my_file.close(); 
	}
	return 0;
}

вихід:

Відкрийте Файли

Ось скріншот коду:

Відкрийте Файли

Пояснення коду:

  1. Включіть файл заголовка iostream у програму, щоб використовувати її функції.
  2. Включіть файл заголовка fstream у програму, щоб використовувати його класи.
  3. Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
  4. Виклик функції main(). Логіка програми повинна знаходитися в її тілі.
  5. Створіть об’єкт класу fstream і назвіть його my_file.
  6. Застосуйте функцію open() до вищевказаного об’єкта, щоб створити новий файл. Режим виходу дозволяє нам записувати у файл.
  7. Використовуйте оператор if, щоб перевірити, чи не вдалося створити файл.
  8. Повідомлення для друку на консолі, якщо файл не було створено.
  9. Кінець тіла оператора if.
  10. Використовуйте оператор else, щоб вказати, що робити, якщо файл було створено.
  11. Повідомлення для друку на консолі, якщо файл було створено.
  12. Застосуйте функцію close() до об’єкта, щоб закрити файл.
  13. Кінець тіла оператора else.
  14. У разі успішного завершення програма повинна повернути значення.
  15. Кінець тіла функції main().

Як закрити файли

Раз а C++ програма завершується автоматично

  • змиває потоки
  • звільняє виділену пам'ять
  • закриває відкриті файли.

Однак, як програміст, ви повинні навчитися закривати відкриті файли до завершення програми.

Об’єкти fstream, ofstream і ifstream мають функцію close() для закриття файлів. Синтаксис функції:

void close();

Як писати у файли

Ви можете писати у файл прямо зі свого C++ програма. Для цього ви використовуєте оператор вставки потоку (<<). Текст, який потрібно записати у файл, потрібно взяти в подвійні лапки.

Давайте продемонструємо це.

Приклад 2:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file.txt", ios::out);
	if (!my_file) {
		cout << "File not created!";
	}
	else {
		cout << "File created successfully!";
		my_file << "Guru99";
		my_file.close();
	}
	return 0;
}

вихід:

Як писати у файли

Ось скріншот коду:

Як писати у файли

Пояснення коду:

  1. Включіть файл заголовка iostream у програму, щоб використовувати її функції.
  2. Включіть файл заголовка fstream у програму, щоб використовувати його класи.
  3. Включіть простір імен std у програму, щоб використовувати її класи без її виклику.
  4. Виклик функції main(). Логіку програми слід додати в тіло цієї функції.
  5. Створіть екземпляр класу fstream і дайте йому назву my_file.
  6. Використовуйте функцію open(), щоб створити новий файл під назвою my_file.txt. Файл буде відкритий у вихідному режимі для запису в нього.
  7. Використовуйте оператор if, щоб перевірити, чи не було відкрито файл.
  8. Текст для друку на консолі, якщо файл не відкрито.
  9. Кінець тіла оператора if.
  10. Використовуйте оператор else, щоб вказати, що робити, якщо файл було створено.
  11. Текст для друку на консолі, якщо файл було створено.
  12. Напишіть текст у створений файл.
  13. Використовуйте функцію close(), щоб закрити файл.
  14. Кінець тіла оператора else.
  15. Після успішного завершення програма повинна повернути значення.
  16. Кінець тіла функції main().

Як читати з файлів

Ви можете читати інформацію з файлів у ваш C++ програма. Це можливо за допомогою оператора вилучення потоку (>>). Ви використовуєте оператор так само, як і для читання введених користувачем даних із клавіатури. Однак замість використання об’єкта cin ви використовуєте об’єкт ifstream/fstream.

Приклад 3:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file.txt", ios::in);
	if (!my_file) {
		cout << "No such file";
	}
	else {
		char ch;

		while (1) {
			my_file >> ch;
			if (my_file.eof())
				break;

			cout << ch;
		}

	}
	my_file.close();
	return 0;
}

вихід:

Читання з файлів

Немає такого файлу

Ось скріншот коду:

Читання з файлів

Пояснення коду:

  1. Включіть файл заголовка iostream у програму, щоб використовувати її функції.
  2. Включіть файл заголовка fstream у програму, щоб використовувати його класи.
  3. Включіть простір імен std у програму, щоб використовувати її класи без її виклику.
  4. Виклик функції main(). Логіку програми слід додати в тіло цієї функції.
  5. Створіть екземпляр класу fstream і дайте йому назву my_file.
  6. Використовуйте функцію open(), щоб створити новий файл під назвою my_file.txt. Файл буде відкрито в режимі in для читання з нього.
  7. Використовуйте оператор if, щоб перевірити, чи файл не існує.
  8. Текст для друку на консолі, якщо файл не знайдено.
  9. Кінець тіла оператора if.
  10. Використовуйте оператор else, щоб вказати, що робити, якщо файл знайдено.
  11. Створити змінна char названий гол.
  12. Створити поки петля для перегляду вмісту файлу.
  13. Запис/збереження вмісту файлу в змінній ch.
  14. Використовуйте умову if і функцію eof(), тобто кінець файлу, щоб гарантувати, що компілятор продовжує читати файл, якщо кінець не досягнуто.
  15. Використовуйте оператор break, щоб припинити читання файлу після досягнення кінця.
  16. Вивести вміст змінної ch на консоль.
  17. Кінець тіла while.
  18. Кінець тіла оператора else.
  19. Викличте функцію close(), щоб закрити файл.
  20. Після успішного завершення програма повинна повернути значення.
  21. Кінець тіла функції main().

Підсумки

  • За допомогою обробки файлів вихідні дані програми можна надіслати та зберегти у файлі.
  • Після цього до даних у файлі можна застосувати низку операцій.
  • Потік — це абстракція, яка представляє пристрій, де виконуються операції введення/виведення.
  • Потік може бути представлений як адресат або джерело символів невизначеної довжини.
  • Бібліотека fstream надає C++ програмісти з методами обробки файлів.
  • Щоб використовувати бібліотеку, ви повинні включити її у свою програму за допомогою директиви препроцесора #include.