Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_prog2_ru_2016_3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
334 Кб
Скачать
☆

Int fclose(file *имя);

Эта функция закрывает открытый поток. В функцию передается указатель на структуру типа FILE (имя открытого потока), и при успешном закрытии потока функция возвращает 0, иначе – EOF(–1). Эта функция удаляет структуру типа FILE, выгружает содержимое буфера на диск, если файл был открыт для записи, и вызывает функцию закрытия файла, которая обновляет содержимое директория (обновляет информацию о размере, дате и времени). Например: fclose(fp);

В программе может быть открыто несколько файлов. В конце работы с ними их необходимо все закрыть. Есть функция закрытия всех открытых файлов с прототипом: int fcloseall(void);

Эта функция возвращает число закрытых файлов, или EOF, если хотя бы один файл не удалось закрыть.

int n=fcloseall(void);

printf("n=%d",n); //n=2,если закрылись два открытых потока)

// или n=-1,если какой-либо поток из двух открытых не закрывается

Для переоткрытия файла с другим режимом доступа существует функция со следующим прототипом:

FILE *freopen(const char *filename,const char*mode,FILE *fp);

Эта функция закрывает поток fp с прежним именем файла и открывает снова этот же поток с именем файла, на который указывает строка filename в режиме, указанном в строке mode. В случае успеха функция возвращает указатель на описание открытого потока, которое будет совпадать с fp, иначе NULL. Если имена файлов разные, происходит переадресация файлового ввода-вывода.

fp=freopen("D:\\User\\myfile.txt","a",fp);

FILE *fp1=freopen("D:\\User\\myfile1.txt","ab",fp);

freopen("D:\\User\\abc.txt","r",fin);

Пример. Файл сначала открывается для чтения, затем снова откры­вается для дополнения.

#include<stdio.h>

Int main()

{FILE *fp;

char buff[100], *fname ="myfile.txt";

fp=fopen(fname,"r"); //открытие потока для чтения из файла

if(fp!=NULL)fgets(buff,50,fp);//чтение из файла строки

else {puts("ERROR_1"); return -1;}

puts(buff); //вывод на экран считанной из файла строки

fp=freopen(fname,"a",fp); //переоткрытие потока

if(fp!=NULL) fputs("abcdef",fp);//добавление строки

else {puts("ERROR_2"); return -1;}

fclose(fp); //закрытие потока

return 0;}

При работе с файлами большая роль отводится обработке ошибок. Для анализа ошибок можно использовать функцию c прототипом:

Void perror(const char *str);

Эта функция выводит в поток (на экран) строку str вместе с системной ошибкой. Список системных ошибок определен в файле <stdlib.h>.

FILE *ptr=fopen("abc.doc","r"); // открытие файла для чтения

if(fp==NULL){perror("Не могу открыть файл: "); return -1;}

char c=fgetc(ptr); // чтение одного символа

fclose(ptr); //закрытие потока

Если файл в текущем директории отсутствует, то на экран выведется:

Не могу открыть файл: No such file or directory

После успешного открытия файла программа может осуществ­лять файловый ввод-вывод.

2.3 Посимвольный ввод-вывод

Функция посимвольной записи (вывода) в файл имеет прототип:

Int fputc(int ch, file *fp);

Эта функция помещает символ int ch после преобразования в тип char в открытый поток fp, связанный с файлом. В случае успеха возвращает код записываемого в файл символа, а в случае ошибки или достижения конца файла – EOF.

Пример. Запись символов в открытый для записи файл через поток fp

FILE *fp=fopen("abc.txt","w"); //открытие потока для записи

if(fp==NULL){puts("ошибка открытия файла"); return -1;}

char s1='Z', str1[]="Запорожье",s2;

fputc(s1,fp); // запись символа в файл через поток fp

for(int i=0; i<9; i++)

fputc(str1[i],fp); // запись 9 символов в файл

fputc('\n',fp); // запись символа \n в файл

printf("Введите символ или Ctrl-Z");

while((s2=getchar())!=EOF)

fputc(s2,fp); //запись символов в файл

fclose(fp); //закрытие потока

Функция посимвольного чтения (ввода) из файла имеет прототип:

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