Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции за I семестр конспект Гуревича для C++ B....doc
Скачиваний:
11
Добавлен:
21.11.2018
Размер:
1.3 Mб
Скачать

16.3. Закрытие файла

После окончания работы с файлом доступ к нему необходимо закрыть. Это выполняет функция fclose(указатель файла). Например, файл из предыдущего примера закрывается так: fclose (f);

Для закрытия нескольких файлов введена функция, объявленная следующим образом: void fcloseall(void);

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

FILE* freopen (char *имя_файла, char *режим, FILE *указатель_файла);

Эта функция сначала закрывает файл, объявленный «указателем_файла» (как это делает функция fopen), а затем открывает файл с «именем_файла» и доступом, задаваемым «режим».

В языке С имеется возможность работы с временными файлами, которые нужны только в процессе работы программы и которые надо удалить после выполнения части вычислений. В этом случае вместо fopen используется функция:

FILE* tmpfile (void);

которая создает на диске временный файл с правами доступа «w+b», после завершения работы программы или после закрытия временного файла он автоматически удаляется.

16.4. Запись - чтение информации

Все действия по чтению-записи данных в файл можно разделить на три группы:

- операции посимвольного ввода-вывода;

- операции построчного и форматированного ввода-вывода;

- операции ввода-вывода по блокам.

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

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

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

int fgetc(FILE *f)

- считывает и возвращает символ из файла f;

int fputc(int ch, FILE *f)

- записывает в файл f символ ch.

(Хотя ch формально имеет тип int, при успешной работе он преобразуется в (либо из) unsigned char. Но при ошибке эти функции возвращают стандартное значение EOF (обычно равное -1)).

Б) Построчный и форматированный ввод-вывод

Эти функции служат для чтения/записи текста и обычно применяются для текстовых файлов.

В функциях построчного ввода-вывода происходит пере­нос из файла, или в файл строк символов.

char * fgets (char *S, int m, FILE *f)

- чтение из файла f в массив S строки текста, длиной не более m байт. При ошибке (и только при ошибке) возвращает NULL. При чтении, в отличие от gets(), прочтенный символ '\n' заносится в массив S в конец полученной строки.

int fputs (char *S, FILE *f)

- запись в файл f строки S. В отличие от puts(), в конце строки символ '\n' автоматически не добавляется; т.е. fputs(S,f) равносильно fprintf(f,"%s",S) (см. ниже).

Форматированный ввод-вывод производится функциями:

int fscanf (FILE *f, char *формат, список адресов объектов)

- считывает из файла f информацию для объектов в соответствии с указанными форматами;

int fprintf (FILE *f, char *формат, список объектов)

- записывает в файл f объекты, указанные в списке в соответствии с форматами.

Данные функции аналогичны функциям scanf() и printf(), рассмотренным раньше, только добавлен параметр – указатель на файл. При ошибке возвращают значение, меньшее или равное 0.