Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
07.01.2020
Размер:
3.08 Mб
Скачать

Ifstream in(argv[1], ios::in | ios::binary); if(!in){

cout«"He вдається відкрити файл" « endl; return 1;

}

while(in) {// Досягши кінця файлу потоковий об'єкт in прийме значення false. in.get(ch); if(in) cout« ch;

}

In.CloseO; getchO; return 0;

}

Досягши кінця файлу, потоковий об'єкт in прийме значення ФАЛЬШ, яке зу­пинить виконання циклу while. Проте існує дещо коротший варіант коду програми організації циклу, призначеного для зчитування і відображення вмісту файлу: while(in.get(ch)) cout« ch;

Цей варіант організації циклу також має право на існування, оскільки фун­кція get() повертає потоковий об'єкт in, який, досягши кінця файлу, прийме значен­ня false. У наведеному нижче коді програми для запису рядка у файл використо­вується функція put().

Код програми 9.14. Демонстрація механізму використання функції put() для запису рядка у файл #include <iostream> // Для потокового введення-виведення

#include <fstream> // Для роботи з файлами

using namespace std; // Використання стандартного простору імен

Int mainO

{

char*p = "Всім привіт!";

ofstream outftesf, ios::out | ios::binary);

if(!out) {

cout«"He вдається відкрити файл" « endl; return 1;

} while(*p) out.put(*p++);

out.closeO; getchO; return 0;

}

  1. Зчитування та записування у файл блоків даних

Для зчитування і записування у файл блоків двійкових даних використову­ються функції-члени readO і writeO- їх прототипи мають такий вигляд: istream &read(char *buf, streamsize пит)] ostream &write(const char *buf, int streamsize num);

  1. Функція readO зчитує пит байт даних з пов'язаного з файлом потоку і поміщає їх у буфер, який адресується покажчиком buf.

  2. Функція write() записує пит байт даних у пов'язаний з файлом потік з буфера, який адресується покажчиком buf.

Як уже зазначалося вище, тип streamsize визначається як певний різновид ці- лочисельного типу. Він дає змогу зберігати найбільшу кількість байтів, яку можна передана у процесі будь-якої операції введення-виведення даних.

У процесі виконання наведеної нижче програми спочатку у файл записується масив цілих чисел, а потім його значення зчитується з файлу.

Код програми 9.15. Демонстрація механізму використання функцій readO і write()

#include <iostream> // Для потокового введення-виведення

#include <fstream> // Для роботи з файлами

using namespace std; // Використання стандартного простору імен

Int mainO

{

int n[5] = {1,2, 3, 4,5}; register int і;

ofstream outftest", ios::out | ios::binary); if(!out) {

cout«"He вдається відкрити файл" « endl; return 1;

}

out.write((char*) &n, sizeof n); out.closeO;

for(i=0; i<5; І++) n[i] = 0; // Очищує масив

Ifstream inftest", ios::in | ios::binary); if(!in){

cout«"He вдається відкрити файл" « endl; return 1;

} in.read((char*) &n, sizeof п);

for(i=0; і<5; І++) // Відображаємо значення, зчитані з файлу, cout« п[і]

in.closeO; getchO; return 0;

}

Зверніть увагу на те, що в настановах звернення до функцій readO і writeO ви­конуються операції приведення типу, які є обов'язковими при використанні буфе­ра, що визначається у вигляді не символьного масиву.

Функція gcountQ повертає кількість символів, зчитаних у процесі вико­нання останньої операції введення даних.

Якщо кінець файлу досягнуто ще до того моменту, як було зчитано пит сим­волів, то функція read() просто припинить своє виконання, а буфер міститиме сті­льки символів, скільки вдалося зчитати до цього моменту. Точну кількість зчита­них символів можна дізнатися за допомогою ще однієї функції-члена класу дсо- unto, яка має такий прототип: streamsize gcountO;

Функція gcountO повертає кількість символів, зчитаних у процесі виконання ос­танньої операції введення даних.