Приклади розв‘язання задач при роботі з файлами. Задача 1.
Демонстрація основних функцій роботи з файлами.
#include <stdio.h>
void main ( )
{
int n;
char str[50], strl[50), ch;
FILE *fp;
// заповнюємо файл
fp = fopen ("ex.txt", "w");
puts ("Уведіть ціле число"); scanf ("%d" ,&n) ;
fprintf (fp, "%d\n", n) ;
puts ("Уведіть символ"); ch = getchar( ) ;
putc (ch, fp);
puts ("Уведіть рядок"); gets (str) ;
fputs ( str, fp ) ;
fclose (fp) ;
// читаємо з файлу
if((fp = fopen("ex.txt","r")) != NULL )
{
fcanf ( fp, "%d", &n) ; printf ("n=%d\n" , n) ;
ch = getc (fp) ; putchar (ch) ;
fgets (strl, 50, fp) ; puts ( str1 ) ;
fclose (fp) ;
}
else printf ("\n Не можна відкрити файл для читання!");
}
Другий параметр функції fgefs() – кількість N символів, що зчитуються, включаючи '\0'. Ця функція припиняє роботу після читання N-1 символу, або після читання '\0’. У будь-якому випадку в кінець рядка додається '\0'. Функція fgets( ) повертає або адресу прочитаного рядка, або NULL по закінченні файлу чи у випадку помилки.
У випадку закінчення файлу чи помилки функція getc( ) повертає EOF.
Функція putc( ) повертає записану літеру або ( у випадку помилки) - EOF.
Функція fputs( ) повертає код останнього прочитаного символу, якщо все в порядку, і EOF у випадку помилки. Ця функція не переводить рядок автоматично.
Усі приведені вище функції обробляли файл послідовно – символ за символом. Мова С надає можливість працювати з файлом і як з масивом: безпосередньо досягати будь-якого визначеного байта. Для позиціюванння файлу служить функція
fseek ( покажчик на файл, зсув від поч. крапки, поч. крапка)
Другий аргумент має тип long, його значення може бути більше і менше нуля. Він показує, як далеко (у байтах) варто просунутися від початкової точки. Третій аргумент є кодом, що визначає положення початкової точки у файлі. Установлено такі значення для коду
0 – початок файлу;
1 – поточна позиція;
2 – кінець файлу.
У випадку успіху функція fseek( ) повертає 0, а якщо була помилка (наприклад, спроба виходу за ліву границю файлу ), тоді повертається -1.
