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

Функції get() та put()

istream &get(char &ch);

ostream & put(char ch);

Функція get() зчитує один символ з потоку та записує його значе­ння в ch. Вона повертає посилання на потік. Функція put() записує ch у потік та повертає посилання на цей потік.

Функції використовують для текстових та бінарних файлів. При роботі з бінарними файлами необхідно відкрити їх в режимі ios::binary.

Приклад здійснює зчитування файла в бінарному ркежимі будь-який файл.

#include <iostream> #include <fstream> using namespace std; int main() { char sf[40]; char ch;  
fstream F; //повязуємо змінну F з потоком для режиму зчитування
printf("Введіть ім_я файлу: "); gets(sf);  
F.open(sf, ios::in | ios::binary); //відкриття файлу для зчитування в бінарному режимі
if (F) {  
//варіант зчитування №1 /* while (F) { F.get (ch); cout << ch; } */ // цикл зчитує посимвольно відкритий файл
//варіант зчитування №2 while (F.get(ch)) cout << ch;  
F.close(); } else  
cout<<"Помилка відкриття файлу "<<endl; return 0; }  

Приклад ілюструє запис у файл по одному символу введеного символьного рядка.

#include <string.h> #include <iostream> #include <fstream> using namespace std; int main() {  
int i=0; char sf[80], str[80]; char ch;  
ofstream F; //повязуємо змінну F з потоком для режиму запису
printf("Введіть ім_я файлу: "); gets(sf);  
F.open(sf, ios::out | ios::binary); // відкриваємо файл для запису в бінарному режимі
if (F) {  
printf("Введіть символьний рядок: "); gets(str);  
for(int i=0;i < strlen(str);i++) F.put(str[i]); //посимвольно записуємо введений рядок
F.close(); }  
else cout<<"Виникла помилка "<<endl; return 0; }  

Результат виконання:

Введіть ім_я файлу: c:\dat.txt

Введіть символьний рядок: I love C++.

Результат запису у файл:

Функції read() та write()

istream &read(unsigned char *buf, int num);

ostream &write(const unsigned char *buf, int num);

Функція read() зчитує num байт з потоку у буфер buf.

Фун­кция write() записує num байт в потік з буферу buf.

Буфер buf представляє собою масив символів, тому для запису будь-яких даних необхідно перетворити до масиву символів.

Якщо кінець файлу досягається до того, як буде зчитано задане число символів, функ­ція read() зупиниться, а у буфері буде знаходитись кількість зчитаних символі. Для визначення кількості зчитаних символів використовують функцію int gcount().

Приклад ілюструє використання цих функцій для запису та зчитування цілого одновимірного масиву:

#include <string.h> #include <iostream> #include <fstream> using namespace std; int main() { int n[5] = {1, 2, 3, 4, 5}; int i;  
ofstream Fzap; //оголошення змінної, пов’язаною з потоком введення
Fzap.open("c:\\priklad.dat", ios::out | ios::binary); //відкриваємо файл в бінарному режимі для запису даних
if (!Fzap) { cout<<"Помилка відкриття файлу "<<endl; return 0; } //перевіряємо чи файл відкрився, якщо ні то дати повідомлення на екран та вийти з програми
Fzap.write((char *) &n, sizeof(n)); //записуємо змінну n розміром sizeof(n)
Fzap.close(); //зачиняємо файл
for (i=0; i<5; i++) n[i] = 0; //очищуємо масив шляхом обнулінням кожного елемента
ifstream Fread; //оголошення змінної, пов’язаною з потоком виведення
Fread.open("c:\\priklad.dat", ios::in | ios::binary); //відкриваємо файл в бінарному режимі для зчитування даних
if (!Fread) { cout<<"Помилка відкриття файлу "<<endl; return 0; } //перевіряємо чи файл відкрився, якщо ні то дати повідомлення на екран та вийти з програми
Fread.read((char *) &n, sizeof(n)); //зчитування інформації в змінну n розміром sizeof(n)
Fread.close(); //зачиняємо файл
printf("Зчитаний вектор: "); for (i=0; i<5; i++) cout << n[i] << " "; //виводимо на екран зчитаний масив
return 0; }  

Результат запису у файл

Результат виконання програми

Зчитаний вектор: 1 2 3 4 5


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: