Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие2013_09_28.doc
Скачиваний:
24
Добавлен:
20.05.2015
Размер:
2.72 Mб
Скачать

Закрытие файловых потоков

Когда работа с файловым потоком завершена, необходимо разорвать связь между потоком и ассоциированным с ним файлом, для этого применяются функции закрытия потока fclose() и fcloseall().

Прототип:

int fclose(FILE *_stream);

Описание:

Функция fclose() закрывает указанный поток _stream. Все буфера, связанные с потоком _stream, перед закрытием сбрасываются (если файл был открыт для вывода–функция “выталкивает” на диск все данные из внутреннего буфера). Буфера, размещенные системой, освобождаются во время процесса закрытия. Буфера, назначенные функциями setbuf() или setvbuf(), не освобождаются автоматически.

Возвращаемое значение:

Функция fclose() при успешном завершении возвращает 0. Если были обнаружены какие-либо ошибки, функция fclose() возвращает значение EOF.

Прототип:

int fcloseall(void);

Описание:

Функция fcloseall() закрывает все открытые потоки, исключая stdin и stdout, stdprn, stdaux и strerr.

Возвращаемое значение:

fcloseall() возвращает число закрытых потоков. При возникновении ошибки возвращает EOF.

Пример:

#include<stdio.h>

int main(void)

{

FILE *fp1,*fp2;

int streams_closed;

/* открыть два потока */

fp1 = fopen("DUMMY.ONE","w");

fp2 = fopen("DUMMY.TWO","w");

/* закрыть открытые потоки */

streams_closed = fcloseall();

if(streams_closed == EOF)

/* вывести сообщение об ошибке */

perror(" Ошибка ");

else

/* вывести результат работы функции */

printf("Было закрыто %d потока\n",streams_closed);

return 0;

}

Удаление файлов

Прототип:

int remove(char *_path);

Описание:

remove() удаляет файл, имя которого определяется параметром _path. Если файл был открыт, не забудьте его предварительно закрыть. Строка с именем файла может включать его полный маршрут.

Возвращаемое значение:

При успешном завершении remove() возвращает 0. При ошибке возвращает -1 и присваивает глобальной переменной errno одно из следующих значений:

  • ENOENT - Такого файла или директории нет.

  • EACCES - Доступ запрещен.

Пример:

#include <stdio.h>

int main(void)

{

char file[80];

/* запросить имя удаляемого файла */

printf("Введите имя удаляемого файла");

gets(file);

/* удалить файл */

if(remove(file)==0)

printf("Файл %s удален.\n", file);

else

perror("remove");

return 0;

}

Переименование файлов

Прототип:

int rename(char *_oldname,char *_newname);

Описание:

Функция rename() изменяет имя файла с _oldname на _newname. Если спецификация дисковода включена в имя _newname, то она должна быть той же, что и в _oldname.

Директории в маршруте (path) не обязательно должны быть теми же самыми, поэтому функцию rename() можно использовать для пересылки файла из одной директории в другую. Применять шаблоны не разрешается.

Возвращаемое значение:

При успешном переименовании файла функция rename() возвращает 0. В случае ошибки, возвращается -1, а глобальная переменная errno получает одно из следующих значений:

  • ENDENT - Маршрут или имя файла не найдены.

  • EACCES - Отказ доступа.

  • ENOTSAM - Не то же самое устройство.

Пример:

#include <stdio.h>

int main(void)

{

char oldname[80],newname[80];

/* запросить имя переименовываемого файла, и новое имя */

printf("Имя переименовываемого файла:");

gets(oldname);

printf("Новое имя:");

gets(newname);

if(rename(oldname,newname)==0)

printf("Файл переименован с %s в %s\n",oldname,newname);

else

perror("rename");

return 0;

}