Увага!!! При відкритті не забути вказати, що файл двійковий (b).

Define MAXLIN 80

Фрагмент 2

if((fp=fopen("F.txt","r"))!=NULL)

{

while(fscanf(fp,"%d %s ",&j,str)!=EOF)

cout<<"j="<<j<<"str="<<str;

}

Помітимо, що можна було використовувати fi для двох різних файлів, тому що ми закрили перший файл, перш ніж відкрити другий. На відміну відgetc() і putc() ці дві функції одержують вказівник типуFILE у якості першого аргументу. Дві інші, описані нижче, одержують його як останній аргумент.

Функція fgets()

Ця функція має три аргументи, у той час як gets() має один.

#include <stdio.h>

main( )

(

FILE *fl;

char *string[MAXLIN];

fl = fopenf (“story", " r");

while ( fgets(string, MAXLIN, fl) != NULL) puts(string);

}

Перший із трьох аргументів функціїfgets() є вказівником на місце розташування зчитуваного рядка. Ми розташовуємо введену інформацію всимвольному масивіstring.

Другий аргумент містить граничну довжину зчитуваного рядка. Функція припиняє роботу після зчитування символу нового рядка або після зчитування символів загальним числом MAXLIN - 1 ( залежно від того, що відбудеться раніше). У кожному разі нуль-символ ('\0') додається в самий кінець рядка.

Третій аргумент указує на файл, який буде читатися.

Різниця міжgets() і fgets () полягає в тому, щоgets() заміняє символ нового рядка на ' \0', у той час якfgets() зберігає символ нового рядка, якщо він був прочитаний.

Подібноgets( ) функціяfgets( ) повертає значенняNULL,якщо зустрічає символ EOF. Це дозволяє перевірити досягнення кінця файлу.

Функція fputs( )

Ця функція дуже схожа наputs( ). Її синтаксис

status = fputs (вказівник рядка, вказівник файлу);

деstatus є цілим числом, яке встановлюється в EOF, якщоfputs( ) зустрічаєEOF або помилку.

fputs (" Ви були праві.”, fileptr);

передає рядок " Ви були праві." у файл, на який посилається вказівникflleptr типуFILE. Звичайно, спочатку потрібно відкрити файл за допомогою функціїfopen(

Подібноputs( ) ця функція не ставить завершальний символ '\0' у кінець скопійованого рядка. На відміну відputs( ) функція fputs( ) не додає символ нового рядка в файл.

Неформатований ввід/вивід.

fread(<рядок куди>,<по скільки байт>,<скільки блоків>,<вказівник на файл звідки>); повертає число прочитаних блоків або 0 у випадку помилки або кінця файлу.

fwrite(<рядок звідки>,<по скільки байт>,<скільки блоків>,<вказівник на файл звідки>); повертає число записаних блоків або 0 у випадку помилки.

 

ДОВІЛЬНИЙ ДОСТУП: fseek( )

Функція fseek( ) дозволяє нам обробляти файл подібно масиву й безпосередньо досягати будь-якого певного байта у файлі, відкритому функцією fopen(). Помітимо, що fseek() має три аргументи й повертає значення типу int.

/' використання fseek( ) для друку вмісту файлу */

#include <stdio.h>

main()

int number;

char names[80];

{

FILE *fp;

cin>>names;

long offset = 0L; /* зверніть увагу, що це тип long */

if ((fp = fopen (names, "r")) = = 0)

printf (“ Я не можу відкрити %s.\n", names);