Для работы с файлом его надо «открыть», обработать, «закрыть». При открытии файла программы с ним связывается отдельный физический поток. Файл должен иметь указатель на структуру типа FILE (FILE *fp;). Это тип, определенный в файле stdio.h. При подключении stdio.h автоматически создаются следующие пять потоков:
1. stdin – для стандартного ввода (клавиатура);
2. stdout - для стандартного вывода (монитор);
3. stderr - для стандартного вывода об ошибок (монитор);
4. stdaux- для дополнительного стандартного вывода (монитор);
5. stdprn - для стандартного вывода (принтер).
Когда файл открывается с помощью функции fopen, структуре типа FILE выделяется ОП, адрес которой получает указатель на структуру, и поток связывается со структурой типа FILE. Структура содержит информацию о файле или устройстве, с которым связан файл программы. Указатель типа FILE используется для операций с файлами с помощью библиотечных функций в/в. Открытие потока производится функцией . Прототип функции:
Filename – определяет полное имя физического файла на МД, это может быть указатель-константа, указатель-переменная строки или строковая константа, которая содержит имя физического файла;
mode – определяет режим доступа к файлу, в сочетании с t - для текстовых файлов, в сочетании с b - для бинарных файлов.
Таблица режима доступа
Значение
режима
Описание режима
Позиция
в/в
r
Открытие существующего файла для чтения.
Начало ф
w
Открытие нового пустого файла для записи. Если файл с указанным именем существовал, то будет уничтожен и создан новый.
Начало ф
a
Открытие файла для добавления в конец файла, если файл с указанным именем не существует, то он создается.
Конец ф
+
Открытие файла для обновления, допускается чтение из файла и запись в файл
Конец ф
Если открытие файла успешно, функция fopen возвращает значение – указатель на переменную типа FILE и связывает файл программы с физическим файлом, а если открытие не состоялось (файл с таким именем не найден) функция fopen возвращает значение NULL. При связывании файла с потоком соответствующим образом инициализируется и внутренняя переменная потока «позиция ввода-вывода». Значение этой переменной соответствует номеру позиции в потоке, с которой начинают записываться или считываться данные. Успешность открытия файла можно проверить с помощью оператора if. Пример:
FILE * fp;
char fn[20] = "ffff.dat";
if (fp = fopen (fn, "rb")) {выполнить блок если файл благополучно открылся}
if ((fp = fopen (fn, "rb")) == NULL) {выполнить блок если файл не открылся}
Функция fclose закрывает один заданный поток (файл). Функция fcloseall закрывает все потоки, открытые с помощью функций fopen, кроме потоков stdin, stdout, stderr. Прототипы этих функций:
int fclose (FILE *stream);
int fcloseall ();
При выполнении закрытия файла буфер потока освобождается, производится запись буферированных данных из буфера в файл. Все буферы, связанные с потоками, сбрасываются и их ОП освобождается. Функция fclose возвращает значение 0, если поток успешно закрыт. Функция fcloseall возвращает количество закрытых потоков. Если при закрытии произошла ошибка, обе функции возвращают значение EOF(-1) (признак конца файла).
С помощью функции remove можно удалить файл. Прототип функции: int remove (const char *filename);
где filename – указатель на строку с именем файла.
Функция remove возвращает 0 при успешном удалении файла и не нуль при неуспешном удалении. Для удаления файл надо предварительно закрыть.