
- •Программирование на языке c
- •Работа с файлами и строками на языке c
- •Основные теоретические сведения Оператор выбора – switch…case…default
- •Оператор безусловного перехода - goto
- •Функции языка c
- •Определение функции
- •Объявление функции
- •Вызов функции
- •Работа с файлами
- •Открытие файла – fopen
- •Закрытие файла – fclose
- •Перемещение позиции ввода/вывода – fseek
- •Запись символа / строки в файл – fputc / fputs
- •Чтение символа / строки из файла – fgetc / fgets
- •Форматированный вывод в файл – fprint
- •Форматный ввод из файла – fscanf
- •Функции стандартной библиотеки ввода/вывода – stdio.H
- •Функции работы со строками – string.H, mem.H, mbstring.H
- •Задание
- •Варианты задания
Работа с файлами
Работа с файлами на языке С предельно проста и напоминает аналогичную из Бейсика. Основные функции работы с файлами – это открытие файла 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;
}