Слайд 2
Порядок роботи із бінарними файлами аналогічний роботі із текстовими файлами
1. Описати файлову змінну
FILE
*filename;
2. Відкрити файл
FILE *fopen(filename, mode)
![Порядок роботи із бінарними файлами аналогічний роботі із текстовими файлами 1. Описати файлову](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-1.jpg)
Слайд 3
Режими відкриття
«rb»
«wb»
«ab»
![Режими відкриття «rb» «wb» «ab»](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-2.jpg)
Слайд 4
Режими відкриття
«rb+» – існуючий двійковий файл в режимі читання та запису;
«wb+» –двійковий файл
в режимі читання і запису (існуючий файл автоматично очищується)
«ab+» – двійковий файл відкривається чи створюється для правки існуючої інформації, або добавки нової в кінець файлу.
![Режими відкриття «rb+» – існуючий двійковий файл в режимі читання та запису; «wb+»](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-3.jpg)
Слайд 5
Поісля відкриття файлу вказівник файлу вказує на 0-й байт файлу, і по мірі
читання чи запису зміщується на зчитану (записану) кількість байтів.
Текуче значення вказівника файлу – номер байту, починаючи з якого буде виконуватися операція читання чи запису.
![Поісля відкриття файлу вказівник файлу вказує на 0-й байт файлу, і по мірі](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-4.jpg)
Слайд 6
Закриття файлу
fclose(FILE *filename);
![Закриття файлу fclose(FILE *filename);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-5.jpg)
Слайд 7
Можливості роботи із файлами
Remove(*filename);
Rename(*oldfilename, *newfilename);
![Можливості роботи із файлами Remove(*filename); Rename(*oldfilename, *newfilename);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-6.jpg)
Слайд 8
Читання із двійкового файлу
fread (void *ptr, size, n, FILE *filename)
Функція fread читає із
файлу filename в масив ptr n елементів розміру size. Функція повертає кількість прочитаних елементів. Після читання із файлу вказівник файлу зміщується на n*size байтів.
![Читання із двійкового файлу fread (void *ptr, size, n, FILE *filename) Функція fread](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-7.jpg)
Слайд 9
Запис у двійковий файл
fwrite (const void *ptr, size, n, FILE *filename);
Функція fwrite записує
в файл filename із масиву ptr n елементів разміру size. Функція повертає кількість записаних елементів. Після записі інформації в файл вказівник файлу зміщується на n*size байтів.
![Запис у двійковий файл fwrite (const void *ptr, size, n, FILE *filename); Функція](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-8.jpg)
Слайд 10
Функція перевірки досягнення кінця файлу
feof(filename);
Функція sizeof(Variable) – повертає розмір (в байтах) необхідний для
збереження змінної Variable
Наприклад
Sizeof(int)
![Функція перевірки досягнення кінця файлу feof(filename); Функція sizeof(Variable) – повертає розмір (в байтах)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-9.jpg)
Слайд 11
Приклад. Створити двійковий файл, куди записати n чисел
#include
using namespace std;
int main()
{
FILE *f;
int
i, n;
double a;
f=fopen(“abc.dat", "wb");
![Приклад. Створити двійковий файл, куди записати n чисел #include using namespace std; int](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-10.jpg)
Слайд 12
cout<<"n="; cin>>n;
fwrite(&n,sizeof(int),1,f);
for(i=0;i{
cout<<"a="; cin>>a;
fwrite(&a,sizeof(double),1,f);
}
fclose(f);
return 0;
}
![cout >n; fwrite(&n,sizeof(int),1,f); for(i=0;i { cout >a; fwrite(&a,sizeof(double),1,f); } fclose(f); return 0; }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-11.jpg)
Слайд 13
Вивід на екран вмісту бінарного файлу
#include
using namespace std;
int main()
{
FILE *f;
int i,n;
double *a;
f=fopen("E:\\STUDENT\\abc.dat",
"rb");
fread(&n,sizeof(int),1,f);
cout<<"n="<
a=new double[n];
fread(a,sizeof(double),n,f);
for(i=0;icout<cout<fclose(f);
return 0;
}
![Вивід на екран вмісту бінарного файлу #include using namespace std; int main() {](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-12.jpg)
Слайд 14
Для довільного переміщення в середині файлу служить функція fseek.
int fseek(FILE *F, long int
offset, int origin);
![Для довільного переміщення в середині файлу служить функція fseek. int fseek(FILE *F, long](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-13.jpg)
Слайд 15
Функція встановлює вказівник текучої позиції файлу F, у відповідності до початку відліку origin
та зміщення offset. Параметр offset рівний кількості байтів, на які буде зміщено вказівник файлу відносно початку відліку, заданого параметром origin. В якості значення для параметра origin можна взяти одне із наступних значень, визначених в stdio.h.
· SEEK_SET – відлік зміщення offset вести від початку файлу;
· SEEK_CUR – відлік зміщення offset вести від текучої позиції файлу;
· SEEK_END – відлік зміщення offset вести від кінця файлу.
![Функція встановлює вказівник текучої позиції файлу F, у відповідності до початку відліку origin](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-14.jpg)
Слайд 16
Функція повертає нульове значення при успішному виконанні операції,
ненульове – при винекненні проблем при
виконанні операції.
Функція fseek фактично дозволяє реалізувати прямий доступ до любого значенння у
файлі. Необхідно тільки знати місцезнаходження (номер байту) значення у файлі.
![Функція повертає нульове значення при успішному виконанні операції, ненульове – при винекненні проблем](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-15.jpg)
Слайд 17
Приклад: В заданому бінарному масиві дійкових чисел поміняти місцями найбільше та найменше значення
#include
using namespace std;
int main()
{
FILE *f;
![Приклад: В заданому бінарному масиві дійкових чисел поміняти місцями найбільше та найменше значення](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-16.jpg)
Слайд 18
int i,n,imax, imin;
double *a, max,min;
f=fopen(“abc.dat", "rb+");
fread(&n,sizeof(int),1,f);
cout<<"n="<a=new double[n];
fread(a,sizeof(double),n,f);
for(imax=imin=0, max=min=a[0],i=1;i{
if (a[i]>max)
{
max=a[i];
imax=i;
}
if (a[i]{
min=a[i];
imin=i;
}
}
![int i,n,imax, imin; double *a, max,min; f=fopen(“abc.dat", "rb+"); fread(&n,sizeof(int),1,f); cout a=new double[n]; fread(a,sizeof(double),n,f);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403832/slide-17.jpg)