Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗФ_ОАиП / Курс Лекций ОАиП.doc
Скачиваний:
77
Добавлен:
21.03.2016
Размер:
5.89 Mб
Скачать

8.2.3 Закрытие файла (потока)

Для закрытия потоков, используемых в программе, применяются стандартные функции fclose и fcloseall.

Один заданный поток закрывается функцией fclose. Ее прототип:

int fclose (FILE *stream);

где stream – поток.

Пример обращения к функции fclose:

fclose (f);

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

Функция fcloseall закрывает все потоки, открытые с помощью fopen, кроме stdin, stdout, stderr. Прототип функции fcloseall:

int fcloseall();

Функция fcloseall возвращает количество закрытых потоков или значение EOF (-1), если при закрытии произошла ошибка.

Примечание. Функция perror позволяет вывести сообщение об ошибке при неуспешном закрытии файла. Ее прототип:

void perror(const char *s);

Пример:

FILE * fp;

fp=fopen("d.dat", "r");

if(!fp) perror("Нельзя открыть файл для чтения");

else fclose ("d.dat");

8.2.4 Удаление файла

Удалить файл можно с помощью функции remove. Ее прототип:

int remove (const char *filename);

где filename – указатель на строку с именем физического файла (имя файла).

Функция remove возвращает значение 0 при успешном удалении файла и не нуль в противном случае. Открытый файл необходимо предварительно закрыть.

8.3 Пример открытия и закрытия файла

В текстовый файл с именем rez.txt записываются результаты выполнения программы в начало нового файла, если файл не существует, или в конец существующего файла.

#include <stdio.h>

void main ()

{

int n; //номер теста

float y,x;

FILE *f; //Описание файловой переменной f (файла)

puts(“Введите x”);

scanf(“%f”,&x);

y=2*x;

f=fopen("rez.txt", "a"); //Открытие файла

puts("Номер теста ?");

scanf("%d",&n);

fprintf(f,"Тест N %d\n",n); //Запись в файл f значения

fprintf(f,"%f %f\n",x,y);

fclose(f); //Закрытие файла

fflush(stdin); getchar();

}

В результате первого выполнения программы в текущем каталоге будет создан файл с именем rez.txt. В его начало запишутся значения n, x, y. При последующих запусках программы на выполнение значения n, x, y будут записываться в конец файла rez.txt, на что указывает режим "a" открытия файла в функции fopen. Отсутствие символа "t" или "b" в режиме открытия файла "говорит" о работе с текстовым файлом (но не расширение txt в имени файла).

8.4 Ввод/вывод в поток

8.4.1 Основные понятия

Ввод/вывод в поток можно осуществить разными способами:

  • в виде последовательности байтов;

  • в виде символов и строк;

  • с использованием форматных преобразований.

Операции ввода/вывода выполняются, начиная с текущей позиции потока. Текущая позиция определяется положением указателя потока. Указатель потока устанавливается на начало или конец файла при открытии в соответствии с режимом открытия. После каждой операции ввода/вывода указатель потока автоматически изменяется.

8.4.2 Позиционирование в файле