Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GRIGOREV.DOC
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
608 Кб
Скачать
☆

1.15. Внешние файлы

Для работы с внешними файлами в языке C используются указатели на файл, которые имеют тип FILE* , они аналогичны по своему назначению переменным типа FILE, TEXT или FILE OF тип в языке PASCAL.

Для открытия файла служит функция

FILE* fopen(char * имя файла , char* режим доступа )

которая возвращает указатель на файл или нулевой адрес NULL при возникновении ошибки. Существуют следующие режимы доступа:

“r” - текстовый файл для чтения;

“w” - текстовый файл для записи;

“a” - текстовый файл для записи в конец файла;

“r+” - текстовый файл для чтения и записи;

“w+” - новый текстовый файл для записи и чтения;

“a+” - текстовый файл с любым режимом доступа.

Модификатор b в конце режима доступа означает бинарный файл с соответствующим режимом доступа. Функция fopen выполняет те же действия, что пара процедур Assign и Reset/Rewrite/Append в языке PASCAL.

Закрытие файла осуществляется функцией

Int fclose(file* указатель на файл )

которая возвращает 0 при успешном завершении или EOF (=-1) при ошибке.

Функция

Int feof(file* файл )

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

Посимвольный ввод-вывод в файл осуществляется функциями:

int fgetc(FILE* указатель на файл ) - возвращает введенный символ или EOF;

int fputc(int символ , FILE* указатель на файл ) - возвращает записанный символ или EOF.

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

int fscanf(FILE* указатель на файл , char* формат , список ввода ) - возвращает количество введенных значений или EOF;

int fprintf(FILE* указатель на файл , char* формат [ , список вывода ] ) - возвращает количество записанных символов или EOF.

Без всяких затруднений, так же, как в языке PASCAL, можно читать из текстового файла числа функцией fscanf.

Строковый ввод-вывод в файл осуществляется функциями:

char* fgets(char* строка , int n, FILE* указатель на файл ) - читает не более n-1 символов, прекращает чтение при достижении символа '\n', добавляет в строку символ '\0', возвращает введенную строку или NULL , если произошла ошибка или достигнут конец файла;

int fputs(char* строка , FILE* указатель на файл ) - записывает строку в файл, возвращает последний записанный символ или EOF в случае ошибки. Функция не записывает символ '\n'.

Указатели на стандартные файлы ввода и вывода stdin и stdout автоматически инициализируются в начале выполнения программы и могут быть использованы без каких-либо дополнительных описаний. Задав в качестве указателя на файл stdin в функциях fgetc, fscanf, fgets, мы получим соответственно функции getchar, scanf и gets для ввода с клавиатуры; использовав stdout в fputc, fprintf и fputs, получим соответственно putchar, printf и puts для вывода на экран.

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

void rewind(FILE* файл ) - устанавливает текущую позицию на начало файла, аналогична процедуре Reset в языке PASCAL;

long ftell(FILE* файл ) - возвращает текущую позицию в файле, аналогична функции FilePos в языке PASCAL;

int fseek(FILE* файл , long смещение , int начало ) - позиционирует файл, аргумент начало принимает одно из трех значений : SEEK_SET - от начала файла, SEEK_CUR - от текущей позиции, SEEK_END - от конца файла (смещение можно задавать со знаком). Возвращает 0 при успешном завершении и ненулевое значение при ошибке. Аналогична процедуре Seek в языке PASCAL.

Ввод-вывод в бинарные файлы осуществляется функциями:

size_t fread(void* буфер , size_t r, size_t n, FILE* файл ) - читает не более n записей длиной r , помещая их в память начиная с адреса буфер, возвращает количество считанных записей, аналогична процедуре BlockRead в языке PASCAL;

size_t fwrite(void* буфер , size_t r, size_t n, FILE* файл ) - записывает из памяти начиная с адреса буфер n записей длиной r в файл, возвращает количество записанных записей, аналогична процедуре BlockWrite в языке PASCAL.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]