Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 2new.rtf
Скачиваний:
7
Добавлен:
09.11.2019
Размер:
620.69 Кб
Скачать

Работа с файлами

Работа с файлами на языке С предельно проста и напоминает аналогичную из Бейсика. Основные функции работы с файлами – это открытие файла fopen, закрытия – fclose, перемещения на заданную позицию – fseek. Каждому файлу при открытии назначается специальный указатель (типа FILE), при помощи которого и происходят дальнейшие операции с ним, именно по этому указателю функции ввода/вывода определяют с каким именно файлом им необходимо работать и этот указатель должен быть передан функции закрытия файла при его закрытии. В качестве функций ввода-вывода могут быть использованы модификации стандартных функций, специально предназначенных для этой цели. Их список приводится далее.

Открытие файла – fopen

Функция открывает файл для ввода-вывода.

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

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

Строка mode должна иметь одно из следующих значений:

mode

Описание

r

Открыть для чтения.

w

Создать для записи. Если файл с таким именем уже существует, он будет перезаписан.

a

Добавить; открывает для записи в конец файла или создает для записи, если файла не существует.

r+

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

w+

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

a+

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

Чтобы указать, что файл должен быть открыт или создан в текстовом режиме, добавьте t к значению строки mode (например, rt, w+t и т.д.); аналогично, для указания двоичного режима, добавьте b в строку mode (например, wb, a+b и т.д.).

Если ни t, ни b не указаны в строке mode, режим определяется глобальной переменной _fmode. Если _fmode установлена в O_BINARY, файлы будут открываться как двоичные. Если _fmode установлена в O_TEXT, файлы будут открываться как текстовые. Эти O_... константы определены в fcntl.h. Когда файл открывается для корректировки, и ввод, и вывод могут осуществляться в соответствующем файле. Однако, вывод не может непосредственно следовать за вводом без промежуточных обращений к fseek или rewind, и ввод не может непосредственно следовать за выводом без промежуточных обращений к fseek или rewind, или ввода, который обнаруживает конец файла.

При успешном завершении fopen возвращает указатель на вновь открытый файл. При ошибке возвращается NULL.

Пример:

/* Программа создает копию autoexec.bat */

#include <stdio.h>

int main(void)

{ FILE *in, *out;

if ((in = fopen("\\AUTOEXEC.BAT", "rt")) == NULL)

{ fprintf(stderr,"Cannot open input file.\n"); return 1;

}

if ((out = fopen("\\AUTOEXEC.BAK", "wt")) == NULL)

{ fprintf(stderr,"Cannot open output file.\n"); return 1;

}

while (!feof(in))

fputc(fgetc(in), out);

fclose(in);

fclose(out);

return 0;

}