Робота з файлами в C++. Частина 2 – бібліотека fstream.




клас ofstream

зворотний класу ifstream, який ми розглянули раніше, і покликаний для запису в файл.

Як і в ifstream, для відкриття або створення файлу використовується конструктор або метод ВІДЧИНЕНО().

або конструктором:

параметр ios_base::додаток вказується, якщо потрібно дописувати в кінець вже наявного файлу. Наприклад коли програма веде лог своєї роботи

За перевірку на відкритість файлу відповідає все та ж is_open()

Принцип той же. Так само можна перевірити чи відкритий файл, використавши в логічному вираженні саму файлову змінну:

оператор <<

Перенаправляє форматований вивід в файл. Принцип той же, що і у аналога з iostream.

Призначений для виведення в текстові файли. Управляється операціями форматування такими як ширина() или SETF(). Їх аналоги повністю рівні однойменною методам з iostream.

Послідовність виведення змінних так само вказується зліва на право: Першою буде виведена змінна, вказана ближче всіх до філе, потім наступна за нею.

оператор endl

Аналогічно оператору з iostream проводить запис перекладу каретки на новий рядок в текстових файлах.

метод write

Використовується в бінарних файлах для запису блоку пам'яті (масиву байт) в файл як вони є. Будь-яка змінна так само є масивом байт, вірніше її так можна розглядати. Відповідно цей метод запише в файл її машинне подання (той вид як вона виглядає в пам'яті).

Цей метод приймає два параметри: Покажчик на блок даних і кількість байт, який цей блок займає. У прикладі рядок займає strlen() байт, ціле sizeof() (яке дасть 4 на 32-х бітних операционках для цілого і 8 для речового).

Ще раз варто акцентувати, що на відміну від форматированного виведення оператором <<, метод запис() не виводить дані в текстовому поданні.

метод близько

Закриває файл метод близько(). для файлів, відкритих на запис, на відміну від файлів на читання, закриття файлу – обов'язковий ритуал. Незакритий файл може не отримати дані. Відбуватися такий ефект може через буфферізаціі самої операційки, коли дані, скидаються в файл, зберігаються насправді в пам'яті і відразу в файл не надходять. Операційна система сама вирішує, коли пора дані зливати.

такий “відкладений” слив називається “коммітов” (від латинського commit). До речі цим ефектом вельми вдало користуються системи управління базами даних, де вставляються записи потрапляють в сховище в пам'яті (званої транзакцією). І тільки після спеціальної команди скопом пишуться в сам файл бази. метод близько() якраз приклад такої команди закриває транзакцію разом з файлом.

Варто про всяк випадок згадати, що якщо потрібно зробити Комміт даних без закриття самого файлу, потрібно застосувати метод врівень()

Відкладені на запис дані надійдуть в файл, але він ще буде відкритий для запису. Цей метод не так часто використовується, але про нього знати корисно.

Методи форматування width, точність

як і в iostream, для красивої розмітки даних в файлі можуть застосовуватися методи форматування даних для виведення оператором << .

ширина() вказує ширину в символах, в яке буде укладатися виведене значення, а точність() кількість знаків дробової частини речового. найпростіший приклад: висновок таблицею в текстовий файл значень тригонометричної функції:

 

Методи позиціонування seekp, tellp

Для переходу по файлу як і у випадку з ifstream існує функція перестановки позиції. називається вона seekp() і отримує ті ж параметри що і описані вище для seekg().

Для отримання поточної позиції в байтах від початку файлу використовується аналогічна функція tellp().

Відео про роботу з файлами в С ++:

Нові уроки з програмування:

Робота з файлами в C++. Частина 2 – бібліотека fstream.
5 (100%) 1 голосування

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *