Fstream
Fstream (Стандартна бібліотека C++) — заголовковий файл для роботи з файлами, у якому підключено такі заголовкові файли як <ifstream>
— бібліотека для файлового введення, і <ofstream>
— бібліотека для файлового виведення.[1] Бібліотека <fstream>
містить функції для роботи з файлами.[2] Об'єкти цього класу підтримують об'єкт filebuf
як свій внутрішній буфер потоку, який виконує операції введення/виведення у файл, з яким вони пов'язані (якщо такі є). Потоки файлів асоціюються з файлами або під час побудови, або за допомогою виклику члена open.
Стандартна бібліотека C++ |
---|
Стандартна бібліотека шаблонів |
|
Стандартна бібліотека С |
|
Використання бібліотеки
Для роботи з файлами необхідно підключити заголовний файл <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::ate |
видалити вміст файлу, якщо він існує |
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;
}
Примітки
- Stroustrup, Bjarne. (1997). The C++ programming language (вид. 3rd ed). Reading, Mass.: Addison-Wesley. ISBN 0-201-88954-4. OCLC 36824946.
- fstream - C++ Reference. www.cplusplus.com. Процитовано 7 грудня 2020.
- Робота з файлами в С++. cppstudio.com. Процитовано 7 грудня 2020.
- Alexander Kuzmenko. Робота з файлами в C++. Процитовано 7 грудня 2020.
- Stroustrup, Bjarne. The C++ programming language. — Reading, Mass., 1991. — Т. 2nd ed. — ISBN 0-201-53992-6.
Посилання
http://www.cplusplus.com/reference/fstream/fstream/
https://en.cppreference.com/w/cpp/header/fstream
https://purecodecpp.com/uk/archives/2751