Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ Программирование и основы алгоритмизации...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.5 Mб
Скачать

Закрытие файла

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

int fclose(fp);

Функция очищает поток, на который ссылается fp. Все ещё не записанные на диск данные из буфера записываются на диск, а непрочитанные данные из буфера теряются. Поток отключается от файла. Динамическая память под буфером освобождается. Функция fclose(fp) возвращает NULL, если поток был успешно закрыт, или EOF, если были какие-то ошибки.

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

Функции в языке c для работы с файлами

В библиотеке языка C имеются следующие функции:

fgetc(0, getc() – ввод (чтение) одного символа из файла;

fputc(0, putc() – запись одного символа в файл;

fprintf() – форматированный вывод в файл;

fscanf() – форматированный ввод (чтение) из файла;

fgets() – ввод (чтение) строки из файла;

fputs() – запись строки в файл.

Двоичный (бинарный) режим обмена с файлами

организуется, например, так:

int c;

c=getc(fp);

putc(c,fp);

Переменная целого типа c использована для приема очередного символа из файла или для записи её значения в файл. Такой обмен с файлами называют также посимвольным.

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

При работе с файлами структур используются функции:

fread(ptr, size, N, fp) – из файла fp считывается N элементов по size байт каждый в область памяти с адресом ptr. В случае успеха возвращается число считанных байтов. При ошибке или достижении конца файла – EOF.

fwrite(ptr, size, N, fp) – в файл fp записывается N элементов по size байт каждый, расположенные в области памяти, начиная с адреса ptr.

Строковый обмен с файлами

Для работы с текстовыми файлами удобно использовать функции fgets() и fputs(). Прототипы этих функций в файле stdio.h имеют следующий вид:

int fputs(const char* s, FILE* fp);

char* fgets(char* s, int n, FILE* fp);

Функция fputs() записывает ограниченную символом ‘\0’ строку (на которую указывает s) в файл, определенный указателем fp на поток, и возвращает неотрицательное целое. При ошибках функция возвращает EOF. Символ ‘\0’ в файл не переносится, и символ ‘\n не записывается в конце строки вместо ‘\0’.

Функция fgets() читает из определенного указателем fp файла не более (n-1) символов и записывает их в строку, на которую указывает s. Функция прекращает чтение, как только прочтет (n-1) символов или встретит символ новой строки ‘\n, который переносится в строку s. Дополнительно в конец каждой строки записывается признак окончания строки ‘\0’. В случае успешного завершения функция возвращает указатель s. При ошибке или при достижении конца файла, при условии, что из файла не прочитан ни один символ, возвращается значение NULL. В этом случае содержимое массива, который адресуется указателем s, остается без изменений. (В отличие от fgets() функция gets() отбрасывает символ ‘\n.)

Указанные функции используем для переноса текста из одного файла в другой. Имена файлов передаются в выполняемую программу из командной строки: f1.dat f2.txt.

#include <stdio.h>

main(int argc, char* argv[])

{ char cc[256];

FILE *f1, *f2;

if((f1=fopen(argv[1],”r”))==NULL)

/*Открытие входного файла*/

{ perror(argv[1]);

return 1;

}

if((f2=fopen(argv[2],”w”))==NULL)

/*Открытие выходного файла*/

{ perror(argv[2]);

return 1;

}

while (fgets(cc, 256, f1)!=NULL)

fputs(cc, f2);

fclose(f1);

fclose(f2);

return 0;

}