Fstream (Стандартна бібліотека C++) — заголовковий файл для роботи з файлами, у якому підключено такі заголовкові файли як <ifstream> — бібліотека для файлового введення, і <ofstream> — бібліотека для файлового виведення. Бібліотека <fstream> містить функції для роботи з файлами. Об'єкти цього класу підтримують об'єкт filebuf як свій внутрішній буфер потоку, який виконує операції введення/виведення у файл, з яким вони пов'язані (якщо такі є). Потоки файлів асоціюються з файлами або під час побудови, або за допомогою виклику члена open.
Використання бібліотеки Для роботи з файлами необхідно підключити заголовний файл <fstream>. У <fstream> визначені кілька класів і підключені заголовні файли <ifstream> – файловий ввід і <ofstream> – файловий вивід. Робота з об’єктами класу fstream аналогічна роботі об’єктів cin та cout. Оголошення та ініціалізація об’єктів введення та виведення в класі iostream об’єкти cin та cout вже оголошені. При роботі з класом fstream об’єкти введення і виведення потрібно оголошувати.
Насправді, клас fstream є похідним від iostream, який є, в свою чергу, похідним від istream і ostream. Причина, з якої інформація про буферизацію і форматування для ostream і istream знаходиться в віртуальному базовому класі ios, в тому, щоб змусити діяти всю цю послідовність похідних класів. З цієї ж причини операції позиціонування в istream і ostream мають різні імена - seekp() і seekg(). У iostream є окремі позиції для зчитування та запису.
Базові класи ios_base"InptOutputStream_Base", базовий клас всієї ієрархії класів потоків. Містить загальні функції, типи і класи, які в основному є прапорами (індикаторами). Ці прапори використовуються функціями підкласів fstream і можуть бути визначені за допомогою функцій ios_base.ios"InputOutputStream", основний підклас, разом з ios_base, визначає всі інші підкласи бібліотеки потоків. Містить функції-прапори форматування і обробки помилок, а також деякі функції, наслідувані від ios_base.ifstream"InputFileStream", організовує зчитування даних з файлу. Клас, функції якого використовуються для зчитування з файлів.ofstream"OutputFileStream", організовує запис даних у файл. Клас, функції якого використовуються для запису у файл.
Функції-члени
Публічні функції-члени (конструктор)Створює об'єкт і опціонально відкриває йогоopenВідкриває файлis_openПеревіряє, чи відкрито файлcloseЗакриває файлrdbufОтримує пов'язаний об'єкт filebufoperator=(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; }
Примітки
Посилання http://www.cplusplus.com/reference/fstream/fstream/
https://en.cppreference.com/w/cpp/header/fstream
https://purecodecpp.com/uk/archives/2751
http://cppstudio.com/uk/post/446/
https://en.cppreference.com/w/cpp/io
Див. також Стандартна бібліотека C++
Стандартна бібліотека мови C
Ввід/вивід
Мова програмування С++ (книга)
C++