efi_Lec_8_Відкриття файлу в мові С

Download Report

Transcript efi_Lec_8_Відкриття файлу в мові С

Файли в мові С

Файлом

називають окрему поіменовану область на одному з пристроїв зовнішньої пам'яті, яка містить однорідну інформацію. Роботою з файлом керує операційна система. Основні дії з файлом – вибір чергового елементу (

читання

) або занесення чергового елементу у файл (

запис

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

відкриття файлу

. Кількість одночасно відкритих файлів в системі достатньо велика, але обмежена, тому файли, з якими робота завершена, треба

закрити

– знищити відповідну структуру з інформацією про файл.

Для відкриття файлу використовується стандартна функція:

FILE* fopen ( char* filename, char* mode); filename

– стрінг, який містить повне ім'я файлу,

mode

– стрінг, який визначає режим роботи із файлом:

"r" "w" "a" "r+" "w+" "a+"

– відкрити існуючий файл для введення з нього (читання); – створити новий файл або відкрити (і звільнити від попереднього вмісту) існуючий файл для виводу (запису) у його початок; – створити новий файл для виводу або відкрити існуючий файл для виводу в кінець файлу; – відкрити існуючий файл для оновлення (тобто читання й запису), яке буде здійснюватись з його початку; – створити новий файл або відкрити існуючий файл для оновлення, яке буде здійснюватись з його початку; – створити новий файл або відкрити існуючий файл і підстроїтись у його кінець для оновлення.

Ця функція повертає вказівник (він називається ще файловою змінною) на структуру

FILE

, яка зберігає всю інформацію про файл.

У разі виникнення помилки при відкритті файлу ця функція повертає

NULL

. Якщо до символів, які задають режим, дописана літера умовчанням), якщо ж літера

b t

, то файл використовується як текстовий (цей режим діє за – то як двійковий.

Зауваження 1.

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

int fflush (FILE* fp);

яка виконує додатковий запис усіх даних, що ще залишились у буфері.

Зауваження 2.

Всі функції, які працюють із файлами, підключаються через файл

stdio.h

або

cstdio

.

Для закриття файлу використовується стандартна процедура:

int fclose (FILE* fp);

Деякі стандартні функції для роботи з файлами в мові С

1.

int fgetc (FILE*fp);

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

EOF

, то сталась помилка або досягнуто кінця файлу.

2.

int fputc (int ch, FILE*fp);

Виводить символ з кодом

ch

у вказаний файл. Повертає змінну з кодом

ch

або

EOF

, якщо сталась помилка.

3.

char * fgets (char *s, int n, FILE *fp);

Здійснює введення в стрінг

s

(буфер) символів із файлу

fp

, до тих пір, поки не виконається одна з умов: • виникає символ • прочитано

n-1 '\n'

(початок нового рядку); • досягнутий кінець файлу; символів.

Після цього стрінг доповнюється

'\0'

. У першому випадку перед

'\0'

записується Якщо читання із файлу завершено успішно, то повертає вказівник на стрінг

s '\n'

. , у разі помилки – повертає

NULL

.

4.

int fputs (char *s, FILE *fp);

Ця функція виводить стрінг

s

у вказаний файл. Повертає

0 EOF

, якщо сталась помилка.

або

5.

int fprintf (FILE *fp , char *format, …);

Ця функція здійснює форматований вивід своїх аргументів у файл, який ідентифікується файловою змінною

fp

, під керівництвом стрінгу

format

. 6.

int fscanf (FILE *fp , char *format, …);

Здійснює форматоване, визначене стрінгом

format

, введення з вказаного файлу. 7.

int feof (FILE *fp);

Повертає не

0

(тобто

ІСТИНУ

), якщо при читанні із файлу був досягнутий кінець файлу і

0

(тобто

ХИБНІСТЬ

) у супротивному випадку.

8.

int ferror (FILE *fp);

Повертає не

0

(тобто

ІСТИНУ

), якщо при виконанні операцій введення або виведення із файлом

fp

виникали помилки і

0

(тобто

ХИБНІСТЬ

) у супротивному випадку.

9.

void rewind (FILE *fp);

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

Стандартна послідовність дій для роботи з файлом виглядає наступним чином: FILE *fp_in = fopen ( "G:\\in.txt" , "r" );

if

(fp_in) // якщо файл існує { // тут працюємо з файлом fclose (fp_in); }

else

// якщо файл не існує fprintf (stderr, "\n Error!!!" );

Файли прямого доступу

Прямий (direct access) (на відміну від послідовного) доступ до файлу реалізують наступні стандартні функції: 1.

2.

3.

int fgetpos ( FILE *fp, fpos_t *pos);

Заносить у змінну

pos

, типом якої є

fpos_t

(це синонім типу

long int

), значення поточної позиції у файлі

fp

. Повертає

0

, якщо позиція

pos

успішно визначена.

int fsetpos ( FILE *fp, fpos_t *pos);

Встановлює у файлі

fp

поточну позицію в положення, визначене вказівником

pos

. Останній мав бути раніше визначений функцією

fgetpos

встановлена.

. Повертає

0

, якщо позиція

pos

успішно

int fseek ( FILE *fp, long offset, int from_where);

Встановлює у файлі

fp

поточну позицію в положення, що відстоїть на аргументом

offset

байтів від положення, визначеного

from_where

у бік кінця файлу при початку при

offset <0

. Аргумент

from_where offset >0

і в бік може набувати значення однієї з трьох стандартних констант:

SEEK_SET (=0)

– відлік від початку файлу; позиції у файлі;

SEEK_CUR (=1) SEEK_END (=2)

– відлік від поточної – відлік від кінця файлу. Повертає

0

, якщо позиція успішно встановлена.

Функції прямого введення-виведення в мові С size_t fread (void* ptr, size_t size, size_t num, FILE* filename);

Читає із файлу

filename

в масив

ptr

не більше

num

елементів розміру менше заявленої).

size

. Повертає кількість успішно прочитаних елементів (вона може бути

size_t fwrite (void* ptr, size_t size, size_t num, FILE* filename);

Записує у файл

filename

із масиву

ptr

елементів розміру

size

. Повертає кількість успішно записаних елементів.

num