ТОП 10:

Файли з послідовним доступом



Послідовна обробка корисна для швидкого запам'ятовування значень у файлах і для звертання з файловими даними як з потоком байтів (аналогічно запису на магнітну стрічку).

Запис даних у файл з послідовним доступом

Приклад 1. Написати програму запису даних у послідовний файл.

#include <stdio.h>

#include <stdlib.h>

int main()

{

File*outf;

int i;

outf=fopen (“int.dat”, “wb”);

if (!outf)

{

puts(“Can’t create file”);

exit(1);

}

puts(“Zapis into file”);

for (i=0; i<100; i++)

fwrite(&i, sizeof(int),1,outf);

fclose(outf);

return 0;

}

 

Для запису даних у бінарний файл використовується функція fwrite(), що містить чотири параметри:

1) Адреса змінної чи масиву змінних, з якого байти копіюються на диск;

2) Число байтів в одній змінній;

3) Число записуваних елементів: 1 для одного значення, або інше позитивне ціле число записуємих елементів масиву;

4) Змінна файлового типу File *, відкритого в двоїчному режимі.

Для запису у відкритий файл на диску масив 100 значень можна скористатися фрагментом програми:

int array[100];

fwrite(&array, sizeof(int),100,outf);

Читання даних з файлу послідовного доступу за допомогою функціїfread().

Приклад 1. Написати програму для послідовного читання бінарних значень з файлу int.dat.

#include <stdio.h>

#include <stdlib.h>

int main()

{

File*inpf;

int I, val;

inpf=fopen (“int.dat”,“rb”);

if (!inpf)

{

puts(“Can’t create file”);

exit (1);

}

for(i=0;i<100;i++)

{

fread(&val,sizeof(int),1,inpf);

printf (“%d”,val);

}

return 0;

}

Функція fread() вимагає тих же аргументів, що і функція fwrite(). Перший аргумент функції є адресою приймача, у який ця функція повинна скопіювати байти з диска. Тому розмір цієї змінної достатній для запам'ятовування необхідної кількості байтів.

Для вивантаження всього масиву зі 100 цілочисельних значень з диска у файл можна використовувати фрагмент програми

int array[100];

fread(&array, sizeof(int),1, inpf);

це буде самим швидким способом читання значень з диска в пам'ять.

Файли з довільним доступом

Особливістю таких файлів є те, що:

1) файл складається з компонентів (записів) однакової довжини (розміру). Кожен запис у файлі має номер.

2) Уздовж файлу переміщається покажчик, положення якого можна позиціонувати програмно за допомогою функції fseek()

           
 
Запис #0
   
Запис #n
 


 

 

3) функція fseek() вимагає три аргументи:

- змінна потоку типу File*, відкритого для двійкового доступу.

- значення зміщення покажчика щодо заданої (чи поточної) позиції

- один із трьох компонентів:

SEEK_SET – зсув покажчика на число байтів, на які внутрішній покажчик пересувається уперед від початку файлу;

SEEK_CUR – зсув на число байтів вперед чи назад від поточної позиції покажчика, у залежності від знака константи;

SEEK_END – зсув на число байт від кінця файлу в напрямку до початку.

Приклад 2.Написати програму для читання 11-го запису у файлі int.dat.

#include <stdio.h>

#include <stdlib.h>

int main()

{

File*inpf;

int val;

inpf=fopen (“int.dat”, “rb”);

if ( ! inpf)

{

puts(“Can’t create file”);

exit (1);

}

fseek(inpf,10*sizeof(int),SEEK_SET);

fread(&val, sizeof(int),1, inpf);

printf(“ Record #10 == %d”,val);

fclose(inpf);

return 0;

}

Другий аргумент у fseek() – добуток розміру в байтах змінної типу intна номер запису (10) шуканого значення.

Якщо змінна fl типу File* вказує на відкритий файл записів zap, то оператор fseek (fl,sizeof(zap),SEEK_CUR); - перемістить поточний покажчик файла з поточного запису на наступний.

А оператор fseek (fl,sizeof(zap), SEEK_CUR); - перемістить поточний покажчик файлу назад на один запис.

Виклик функції fread() так само переміщає покажчик файлу вперед, тому після читання одного запису за допомогою fread() можна використовувати fseek() для відновлення позиції покажчика для того, щоб підготуватися до перезапису нової інформації в те ж місце

 

 

Оператор fseek(f,0,SEEK_END); - знаходить кінець файлу. Цей оператор можна використовувати перед викликом функції fwrite(), щоб додати нові записи у файл, відкритий не в режимі додавання в кінець файлу.

 

 

Приклад 3. За допомогою функції fseek() і fwrite() модифікувати 11-й запис у файлі int.dat.

#include <stdio.h>

#include <stdlib.h>

int main()

{

File*outf;

int val=99;/*нове значення запису */

outf=fopen (“int.dat”, “r+b”);

if (!outf)

{

puts(“Can’t create file”);

exit(1);

}

printf(“Writing %d to record #10”,val);

fseek(outf, 10*sizeof(int),SEEK_SET);

fwrite(&val,sizeof(int),1,outf);

fclose(outf);

return 0;

}







Последнее изменение этой страницы: 2016-04-18; Нарушение авторского права страницы

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