Читання / запис двійкових даних, функції fread(), fwrite() 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Читання / запис двійкових даних, функції fread(), fwrite()



Як зберегти числові дані у файлі?

1. можна використати frintf() і “%f” для речовинних чисел, але потім ці значення однаково будуть збережений як рядок. наприклад:

float n=1./3.

frintf(fp,”%f”,n) // ця функція збереже 1/3 як рядок символів 0.333333 (8 б.),

Тоді при зчитуванні цих даних з файлу fp потрібно буде застосовувати в точності ті ж формати

 

2. Можна зберегти числа в такому ж виді, як це робить програма. Це роблять функції fread() і fwrite(). При цьому як числа, так і символи зберігаються у двійковому поданні(ASCII)

int num=12345; // это двоичное число, в памяти(в двоичном формате)

                // пусть размер типа int = 2 байта

 

0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 1

                                              

 

fprintf(fp,”%d”,num); \\сохраняет двоичные коды символов

                        \\ '1', ‘2’, ‘3’, ‘4’, ‘5’ в файле:

 

0 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 0 1 0 1

‘1’
                       

             
‘2’
 
‘3’
 
‘4’
 
‘5’

 


fwrite(&num,sizeof(int),1,fp); // записывает 1 данное размером sizeof(int)(в нашем

                                            //случае   это 2 байта) в файл fp из буфера по адресу

                                            //num

 

0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 1

 

 

size_t fread (void *buffer, size_t size, size_t cout, FILE *stream); зчитує count елементів довжиною size байтів в область, задану покажчиком buffer з потоку stream;

 

size_t fwrite (const void buffer, size_t size, size_t n, file stream); записує n елементів довжиною довжиною size байтів з буфера, заданого покажчиком buffer у потік stream. Повертає число успішно записаних елементів звичайно воно = size, але при помилці воно може бути менше.

 

Тип size_t визначений у файлі stdio.h, означає «будь-який цілий». У байт, зайнятих цим «будь-яким цілим» можна одержати за допомогою функції sizeof(). Наприклад sizeof(int) - скільки байтів займає тип int.

 

Приклад:

char buf[256]; // масив символів

fwrite(buf,256,1,fp); // перед buf не ставиться &, тому що buf = &buf[0]

int k[10]; // масив цілих

fwrite(k,sizeof(int),10,fp);

 

У прототипах цих функцій використається void *buffer. Він діє у якості «пастки» для всіх типів даних.

 

Збереження структур у файлах.

 

Можна писати дані структур у файлі за допомогою frintf(). Але цей спосіб сам не ефективний його не розглядаємо.

Будемо використати fread() і fwrite() для читання й запису у двійковому поданні (у такому ж, як і програма З)

Структура складається із записів (запис - повний набір інформації, збереженої в 1 елементі структури). Окремі частини записів називаються полями.

 

Наприклад:

struct book {char nazva[50];

                char avtor[30];

                float cena;

                }

Нехай fp - покажчик на файл, а primer - змінна типу структури:

file *fp;

struct book primer;

Тоді

fwrite(&primer, sizeof(struct book),1,fp); //пише у файл fp всі поля запису

                                                           //primer відразу, тобто пише у файл запис

fread() з тими ж аргументами виконує зворотну операцію.

___________________________________________________________________



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 40; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.15.70.191 (0.007 с.)