Fstream
![]() | Було запропоновано об'єднати цю статтю або розділ з iostream, але, можливо, це варто додатково обговорити. Пропозиція з грудня 2020. |
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
|
operator>>
|
зчитує відформатоване введення |
gcount
|
Отримує кількість символів |
get
|
Отримує символи |
getline
|
Отримує строку |
ignore
|
Витягує і відкидує символи |
peek
|
Продивляється наступний символ |
read
|
Зчитує блок данних |
readsome
|
Зчитує дані, доступні у буфері |
putback
|
Повертає символ назад |
unget
|
Ставить вказівник на наступний символ потоку istream на один символ назад |
tellg
|
Отримує позицію у послідовності вводу |
seekg
|
Встановлює положення у послідовності введення |
sync
|
Синхронізує буфер вводу |
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
|
забезпечує високорівневі операції потоку вводу/виводу у файл |
#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;
}
#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. Архів оригіналу за 29 червня 2008. Процитовано 7 грудня 2020.
- ↑ fstream - C++ Reference. www.cplusplus.com. Архів оригіналу за 12 листопада 2020. Процитовано 7 грудня 2020.
- ↑ Робота з файлами в С++. cppstudio.com. Архів оригіналу за 5 серпня 2020. Процитовано 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/ [Архівовано 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.]