Fstream

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Fstream (Стандартна бібліотека C++) — заголовковий файл для роботи з файлами, у якому підключено такі заголовкові файли як <ifstream> — бібліотека для файлового введення, і <ofstream> — бібліотека для файлового виведення.[1] Бібліотека <fstream> містить функції для роботи з файлами.[2] Об'єкти цього класу підтримують об'єкт filebuf як свій внутрішній буфер потоку, який виконує операції введення/виведення у файл, з яким вони пов'язані (якщо такі є). Потоки файлів асоціюються з файлами або під час побудови, або за допомогою виклику члена open.

Використання бібліотеки[ред. | ред. код]

Для роботи з файлами необхідно підключити заголовний файл <fstream>. У <fstream> визначені кілька класів і підключені заголовні файли <ifstream> файловий ввід і <ofstream> файловий вивід.[3] Робота з об’єктами класу fstream аналогічна роботі об’єктів cin та cout. Оголошення та ініціалізація об’єктів введення та виведення в класі iostream об’єкти cin та cout вже оголошені. При роботі з класом fstream об’єкти введення і виведення потрібно оголошувати.[4]

Насправді, клас fstream є похідним від iostream, який є, в свою чергу, похідним від istream і ostream. Причина, з якої інформація про буферизацію і форматування для ostream і istream знаходиться в віртуальному базовому класі ios, в тому, щоб змусити діяти всю цю послідовність похідних класів. З цієї ж причини операції позиціонування в istream і ostream мають різні імена - seekp() і seekg(). У iostream є окремі позиції для зчитування та запису.[5]

Базові класи[ред. | ред. код]

ios_base "InptOutputStream_Base", базовий клас всієї ієрархії класів потоків. Містить загальні функції, типи і класи, які в основному є прапорами (індикаторами). Ці прапори використовуються функціями підкласів fstream і можуть бути визначені за допомогою функцій ios_base.
ios "InputOutputStream", основний підклас, разом з ios_base, визначає всі інші підкласи бібліотеки потоків. Містить функції-прапори форматування і обробки помилок, а також деякі функції, наслідувані від ios_base.
ifstream "InputFileStream", організовує зчитування даних з файлу. Клас, функції якого використовуються для зчитування з файлів.
ofstream "OutputFileStream", організовує запис даних у файл. Клас, функції якого використовуються для запису у файл.

Функції-члени[ред. | ред. код]

Публічні функції-члени[ред. | ред. код]

(конструктор) Створює об'єкт і опціонально відкриває його
open Відкриває файл
is_open Перевіряє, чи відкрито файл
close Закриває файл
rdbuf Отримує пов'язаний об'єкт filebuf
operator=(c++11) Отримує вміст rhs, призначаючи переміщення його членів та базових класів.
swap(c++11) Міняє місцями всі дані між x і *this

Публічні функції-члени, що наслідуються з istream[ред. | ред. код]

operator>> зчитує відформатоване введення
gcount Отримує кількість символів
get Отримує символи
getline Отримує строку
ignore Витягує і відкидує символи
peek Продивляється наступний символ
read Зчитує блок данних
readsome Зчитує дані, доступні у буфері
putback Повертає символ назад
unget Ставить вказівник на наступний сивол потоку istream на один символ назад
tellg Отримує позицію у послідовності вводу
seekg Встановлює положення у послідовності введення
sync Синхронізує буфер вводу

Публічні функції-члени, що наслідуються з ostream[ред. | ред. код]

operator<< Вставляє форматований вивід
put Вставляє символ у поток
write Записує блок данних
tellp Отримує позицію у послідовності виводу
seekp Встановлює позицію у послідовності вводу
flush Очищає буфер вихідного потоку

Режими відкриття файлу[ред. | ред. код]

ios_base::in відкрити файл для читання
ios_base::out відкрити файл для запису
ios_base::ate при відкритті перемістити покажчик в кінець файлу
ios_base::app відкрити файл для запису в кінець файлу
ios_base::trunc видалити вміст файлу, якщо він існує
ios_base::binary відкриття файлу в двійковому режимі

Реалізація файлового вводу-виводу[ред. | ред. код]

basic_filebuf реалізує необроблений файловий механізм
basic_ifstream забезпечує високорівневі операції потоку вводу у файл
basic_ofstream забезпечує високорівневі операції потоку виводу у файл
basic_fstream забезпечує високорівневі операції потоку вводу/виводу у файл

Приклади використння[ред. | ред. код]

Приклад використання ifstream[ред. | ред. код]

#include <iostream>
#include <fstream>

int main() 
{
	std::ifstream myFile;
	//Відкриваємо файл
	myFile.open("myFile.txt");

	if (myFile.is_open()) 
	{
		//Зчитування з файлу N байт
		int n = 10;
		//Створення буфферу
		char* buffer = new char[n + 1]; 
		buffer[n] = 0;
		//Зчитування байтів в буфер
		myFile.read(buffer, n);
		//Вивід на екран
		std::cout << "Байтів зчитано: " << myFile.tellg() << std::endl;
		myFile.seekg(0, std::ios_base::end);
		std::cout << "Розмір файлу (в байтах): " << myFile.tellg() << std::endl;
		std::cout << buffer;
		delete[] buffer;
	} 
	else 
	{
		//Якщо такого файлу не існує, інформуємо про це користувача
		std::cout << "Неможливо відкрити файл" << std::endl;
	}
	myFile.close();

	return 0;
}

Приклад використання ofstream[ред. | ред. код]

#include <iostream>
#include <fstream>
#include <string>

int main() 
{
	std::ofstream fout;
	//Відкриваємо існуючий файл, у іншому випадку створюється новий
	fout.open("myFile.txt", std::ios_base::app);
	std::string s;

	if (fout.is_open()) 
	{
		//Зчитуємо рядок з консолі і записуємо в кінець файлу
		std::cout << "Введіть текст для запису в файл:" << std::endl;
		std::getline(std::cin, s);
		fout << s;
	} 
	else
	{
		//Якщо такого файлу не існує, інформуємо про це користувача
		std::cout << "Неможливо створити файл" << std::endl;	
	}
	fout.close();

	return 0;
}

Примітки[ред. | ред. код]

  1. Stroustrup, Bjarne. (1997). The C++ programming language (вид. 3rd ed). Reading, Mass.: Addison-Wesley. ISBN 0-201-88954-4. OCLC 36824946. Архів оригіналу за 29 червня 2008. Процитовано 7 грудня 2020.
  2. fstream - C++ Reference. www.cplusplus.com. Архів оригіналу за 12 листопада 2020. Процитовано 7 грудня 2020.
  3. Робота з файлами в С++. cppstudio.com. Архів оригіналу за 5 серпня 2020. Процитовано 7 грудня 2020.
  4. Alexander Kuzmenko. Робота з файлами в C++. Процитовано 7 грудня 2020.
  5. Stroustrup, Bjarne. The C++ programming language. — Reading, Mass., 1991. — Т. 2nd ed. — ISBN 0-201-53992-6.

Посилання[ред. | ред. код]

http://www.cplusplus.com/reference/fstream/fstream/ [Архівовано 12 листопада 2020 у Wayback Machine.]

https://en.cppreference.com/w/cpp/header/fstream [Архівовано 29 листопада 2020 у Wayback Machine.]

https://purecodecpp.com/uk/archives/2751 [Архівовано 18 листопада 2020 у Wayback Machine.]

http://cppstudio.com/uk/post/446/ [Архівовано 5 серпня 2020 у Wayback Machine.]

https://en.cppreference.com/w/cpp/io [Архівовано 28 листопада 2020 у Wayback Machine.]

Див. також[ред. | ред. код]

Стандартна бібліотека C++

Стандартна бібліотека мови C

Ввід/вивід

Мова програмування С++ (книга)

C++