Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
20_04_13_FAJLY_20-04.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
144.9 Кб
Скачать

Функция fclose()

Функция fclose() используется для закрытия потока, ранее открытого с помощью fopen().

Она сохраняет в файл данные, находящиеся в дисковом буфере, и выполняет операцию системного уровня по закрытию файла.

Вызов fclose() освобождает блок управления файлом, связанный с потоком, и делает его доступным для повторного использования.

Функция fclose() имеет прототип: int fclose(FILE *fp); где fp - это указатель на файл, возвращенный fopen().

Если возвращен 0, то это означает, что операция закрытия выполнена успешно, а если EOF, то, значит, была ошибка.

Объявление прототипа функции fclose() находится в файле заголовков stdio.h

#include <stdio.h>

int main()

{

FILE *fp;

fp = fopen("logfile", "w");

if (fp == NULL)

printf("Open failed\n");

fclose(fp);

...

}

Функции чтения-записи

int fprintf( FILE *stream, const char *format, ... /*аргументы*/)

Функция преобразует и пишет вывод в поток под управлением формата.

Возвращаемое значение — число записанных символов или, в случае ошибки, отрицательное значение.

Правила построения форматной строки такие же, как для функции printf().

#include <conio.h>

#include <stdio.h>

int main()

{

int bal;

char name[15];

FILE *file;

if ((file = fopen("с:\\temp0\\20.04\\1.txt","w")) == NULL)

printf("Файл невозможно открыть или создать\n");

else{

for(;;){

scanf ("%d%s", &bal, name);

if (bal == 0)

break;

fprintf(file,"%d %s\n", bal, name);

}

}

fclose(file);

return 0;

}

Функция

int fscanf( FILE *stream, const char *format, ... /*аргументы*/)

читает данные из потока под управлением формата и преобразованные величины присваивает аргументам, каждый из которых должен быть указателем. Завершает работу, если исчерпался формат. Возвращает EOF по исчерпании файла или перед любым преобразованием, если возникла ошибка. В остальных случаях функция возвращает количество преобразованных и введенных элементов. Правила построения форматной строки такие же, как для функции scanf().

#include <conio.h>

#include <stdio.h>

int main()

{

int bal;

char name[15];

FILE *file;

if ((file = fopen("1.txt","r")) == NULL)

printf("Файл невозможно открыть или создать\n");

else{

for(;;){

if (feof(file))

break;

fscanf(file,"%d %s", &bal, name);

printf ("%d %s\n", bal, name);

}

}

fclose(file);

getch();

return 0;

}

Функции fread() и fwrite()

Файловая система ANSI С предоставляет две функции, позволяющие читать и писать блоки данных - fread() и fwrite(). Они имеют следующие прототипы: size_t fread(void *буфер, size_t число_байту size_t объем, FILE *fp); size_t fwrite(const void *буфер, size_t число_байт, size_t объем, FILE *fp); В случае fread() буфер - это указатель на область памяти, которая получает данные из файла.

В случае fwrite() буфер - это указатель на информацию, записываемую в файл. Длина каждого элемента в байтах определяется в число_байт.

Аргумент объем определяет, сколько элементов (каждый длиной число_байт) будет прочитано или записано. Наконец, fp - это файловый указатель на ранее открытый поток.

Функция fread() возвращает число прочитанных элементов. Данное значение может быть меньше, чем объем, если был достигнут конец файла или произошла ошибка.

Функция fwrite() возвращает число записанных элементов. Данное значение равно объем, если не возникла ошибка.

#include <conio.h>

#include <stdio.h>

int main()

{

int bal;

FILE *file;

if ((file = fopen("3.txt","w")) == NULL)

printf("Файл невозможно открыть или создать\n");

else{

for(int i=0; i<5;i++){

scanf("%d", &bal);

fwrite (&bal, sizeof(int),1, file );

}

}

fclose(file);

getch();

return 0;

}

#include <conio.h>

#include <stdio.h>

int main()

{

int bal;

FILE *file = fopen("3.txt","r");

if (file == NULL)

printf ("Ошибка при открытии файла");

else {

while (!feof(file)){

fread(&bal, sizeof(int),1, file);

printf ("%d ", bal);

}

}

fclose(file);

getch();

return 0;

}

Если файл был открыт для двоичных данных, то fread() и fwrite() могут читать и писать любой тип информации. Например, следующая программа записывает float в файл: /* запись вещественных чисел в файл */ #include <stdio.h> int main(void) { FILE *fp; float f = 12.23; if((fp=fopen("test", "wb"))==NULL) { printf("Cannot open file."); return 1; } fwrite(&f, sizeof (float), 1, fp); fclose (fp); return 0; } Как иллюстрирует данная программа, буфер может быть (а чаще всего это так и есть) простой переменной.

Одно из наиболее полезных применений fread() и fwrite() - это чтение и запись блоков данных типа массивов или структур. Например, следующий фрагмент записывает содержимое массива ве¬щественных чисел balance в файл balance, используя один оператор fwrite(). Далее она читает мас¬сив, используя один оператор fread(), и выводит его содержимое. #include <stdio.h> int main(void) { register int i; FILE *fp; float balance[100]; /* открытие на запись */ if((fp=fopen("balance", "wb"))==NULL) { printf("Cannot open file."); return 1; } for(i=0; i<100; i++) balance[i] = (float) i; /* сохранение за раз всего массива balance */ fwrite(balance, sizeof balance, 1, fp) ; fclose(fp); /* обнуление массива */ for(i=0; i<100; i++) balance[i] = 0.0; /* открытие для чтения */ if((fp=fopen("balance","rb"))==NULL) { printf("cannot open file"); return 1; } /* чтение за раз всего массива balance */ fread(balance, sizeof balance, 1, fp); /* вывод содержимого массива */ for(i=0; i<100; i++) printf("%f  ", balance [i]); fclose(fp); return 0; }

Использование fread() и fwrite() для чтения или записи сложных данных более эффективно, чем использование повторяющихся вызовов getc() и putc().

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]