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 обозначава името на файла за отваряне.
  • Параметърът режим не е задължителен. Може да приема всяка от следните стойности:
Стойност Descriptйон
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. Използвайте израз за прекъсване, за да спрете четенето от файла, след като краят е достигнат.
  16. Отпечатайте съдържанието на променливата ch на конзолата.
  17. Край на тялото докато.
  18. Край на тялото на оператора else.
  19. Извикайте функцията close(), за да затворите файла.
  20. Програмата трябва да върне стойност при успешно завършване.
  21. Край на тялото на функцията main().

Oбобщение

  • С обработката на файлове изходът от програма може да бъде изпратен и съхранен във файл.
  • След това към данните могат да бъдат приложени редица операции, докато са във файла.
  • Потокът е абстракция, която представлява устройство, където се извършват входно/изходни операции.
  • Потокът може да бъде представен като местоназначение или източник на символи с неопределена дължина.
  • Библиотеката fstream предоставя C++ програмисти с методи за работа с файлове.
  • За да използвате библиотеката, трябва да я включите във вашата програма с помощта на директивата за препроцесор #include.