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

28.2. Основные функции для работы с файлами

Прототипы функций для работы с файлами находятся в файле <stdio.h>.

Функция

Краткое описание

fopen()

Открыть файл

freopen()

Переоткрыть файл с другими правами доступа

fclose()

Закрыть файл

fcloseall()

Закрыть все открытые файлы

fputc()

Записать символ в файл

fgetc()

Прочитать символ из файла

fputs()

Записать строку в файл

fgets()

Прочитать строку из файла

fprintf()

Форматированный вывод в файл

fscanf()

Форматированный ввод из файла

fwrite

Записать блок данных в файл

fread

Прочитать блок данных из файла

fflush()

Дозаписать определенный поток в файл

flushall()

Дозаписать все открытые потоки в файлы

feof()

Возвращает значение true (истина), если достигнут конец файла

fseek()

Установить указатель текущей позиции на определенный байт файла

ftell()

Получить значение указателя текущей позиции в файле

rewind()

Устанавить указатель текущей позиции в начало файла

Также в <stdio.h> определяется несколько макросов: EOF, FOPEN_MAX, SEEK_SET, SEEK_CUR и SEEK_END. Макрос EOF, часто определяемый как -1, является значением, возвращаемым тогда, когда функция ввода пытается выполнить ввод после конца файла. FOPEN_MAX определяет целое значение, равное допустимому максимальному числу одновременно открытых файлов. Другие макросы используются в функции fseek(), выполняющей операции прямого доступа к файлу.

28.3. Открытие и закрытие файлов

Прежде чем работать с файлом (проводить обмен информацией между ним и программой), его надо открыть.

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

FILE *fopen(const char *name, const char *mode);

где name – это указатель на строку символов, представляющую собой допустимое имя файла (надо задавать полный путь к файлу, если он находится не в каталоге запуска программы). Строка mode определяет режим открытия файла.

Функция fopen() возвращает указатель файла – указатель на структурную переменную по шаблону FILE. Никогда не следует изменять значение этого указателя в программе. Если при открытии файла происходит ошибка, то fopen() возвращает пустой указатель (NULL).

Режимы открытия файла:

Режим

Описание

r

Открыть существующий файл для чтения

w

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

a

Открыть файл для добавления в существующий файл (старое содержимое сохраняется). Если такого файла нет, он будет создан

r+

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

w+

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

a+

Открыть файл для добавления или создать для чтения/записи, если он не существует. Чтение/запись допустимы в любом месте файла. При этом в отличие от режима "w+" можно открыть существующий файл и не уничтожать его содержимое; в отличие от режима "r+" в режиме "a+" можно вести запись в конец файла, то есть увеличивать его размеры.

Для указания на текстовый режим работы с файлом после любого из этих значений может быть добавлен символ ‘t’ (режим по умолчанию), для указания на бинарный режим – символ ‘b’. В бинарном режиме с файлами рекомендуется работать с помощью функций блокового ввода/вывода fread() и fwrite().

Пример открытия текстового файла по имени "test.txt" для записи:

FILE *fp;

if ((fp = fopen("test", "w")) == NULL) {

printf("Ошибка открытия файла!\n");

exit(1); // завершение работы программы

}

Обратить внимание! Всегда нужно вначале убедиться, что файл открылся успешно, и лишь затем выполнять с файлом какие-либо операции. Это позволяет при открытии файла обнаружить любую ошибку (например, защиту от записи или отсутствие места на диске, причем обнаружить еще до того, как программа попытается в этот файл что-либо записать).

Допустимое максимальное число одновременно открытых файлов определяется константой FOPEN_MAX. Это значение не меньше 8, но чему оно точно равняется определяется компилятором.

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

При нормальном завершении работы программы для каждого открытого файла fclose() вызывается автоматически. Но отказ от использования в программе fclose() может повлечь всевозможные неприятности, включая потерю данных, испорченные файлы и возможные периодические ошибки в программе.

Прототип функции закрытия файла:

int fclose(FILE *fp);

где fp – указатель файла, возвращенный в результате вызова fopen().

Возвращение функцией fclose() нуля означает успешную операцию закрытия. В случае же ошибки возвращается EOF.