Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабник по C.pdf
Скачиваний:
80
Добавлен:
01.06.2015
Размер:
877 Кб
Скачать
☆

– 30 –

9. ФАЙЛЫ

9.1. ОТКРЫТИЕ И ЗАКРЫТИЕ ФАЙЛОВ

Для работы с дисковыми файлами в С используется тип FILE, определение которого записано в файле stdio.h. Файлы объявляются как указатели на этот тип:

FILE *in, *out;

Файл открывается функцией FILE *fopen( имя_файла, вид_обработки ), здесь имя_файла – текстовая строка, вид_обработки – один из символов ”r”, ”w”, ”a”. Первый означает, что файл открыт для чтения данных, второй – для записи, третий – для добавления данных. Функция возвращает адрес файла.

При режимах ”w” и ”а” файл, если его нет на диске, создается с соответствующим именем. В случае ошибки, например при отсутствии файла в режиме ”r”, функция fopen возвращает NULL. Поэтому рекомендуется следующая схема работы с файлами:

if(( in=fopen(”text”,”r”))==NULL ){

//работа с файлом

}

else

puts(”не могу открыть файл”);

Файл закрывается функцией fclose(указатель_на_файл);

9.2. ЧТЕНИЕ И ЗАПИСЬ В ФАЙЛ

Все функции ввода-вывода, рассмотренные ранее, имеют аналоги для файлов; в перечень их аргументов включается указатель на соответствующий файл. В операторах fprintf и fscanf он первый, в fputs и fgets – последний. Ниже приведена программа перезаписи числа из файла text в файл text1 вместе с поясняющим текстом.

void main() { FILE *in; int numb;

in=fopen(“text”, “r”);

fscanf(in,”%d”,&numb); // считывание числа из файла text в переменную numb fclose(in);

in=fopen(“text1”,”w”);

fprintf(in,”сумма =%d”,numb); // запись в файл строки и числа fclose(in);

}

Для чтения строки из файла служит функция:

fgets( имя_переменной, длина_строки, указатель_на_файл );

Функция fgets при достижении конца файла возвращает NULL. Функция записи строки в файл имеет вид

fputs( имя_строки, указатель_на_файл );

Для того чтобы вывести на экран содержимое файла text по строкам, длиной не более

80символов в каждой, необходимо выполнить следующую программу.

©1998 Калачев Д.П., Лутай В.Н.

– 31 –

#define MaxLine 80; main(){

FILE *f;

char string[ MaxLine ]; f=fopen(”text”,”r”);

while( fgets(string,MaxLine,f) != NULL) puts(string);

}

Чтение символа из файла и запись символа в файл выполняются функциями: getc(указатель_на_файл) и putc(имя_переменной, указатель_на_файл).

Пример: программа выводит посимвольно на экран содержимое файла text.

void main(){ FILE *f; int ch;

if ((f=fopen(”text”,”r”)!=NULL) { while((ch=getc(f)!=EOF) putchar(ch)); fclose(f);

}

else printf(”Не могу открыть файл”);

}

Символ EOF – признак конца файла.

9.3. ПРОИЗВОЛЬНЫЙ ДОСТУП К ФАЙЛУ

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

fseek( указатель_на_файл, смещение, начальная_точка)

Параметр начальная_точка может принимать значения в диапазоне 0, 1, 2. 0 – начало файла, 2 – конец файла, 1 – текущая позиция. Параметр смещение имеет тип long и показывает, на сколько необходимо переместить указатель в файле от начальной точки; может быть положительным и отрицательным. Функция fseek возвращает 0, если все хорошо, или не 0, если встречен конец файла или возникла ошибка.

После того, как с помощью fseek выбрано нужное место в файле, можно применять функции ввода-вывода.

Пример: long offset=0L;

while ( fseek(fp,offset++,0) == 0 ) putchar(getc(fp));

Здесь выводится 1-й символ файла, смещение offset наращивается на 1, выводится 2-й и т.д. до конца файла.

© 1998 Калачев Д.П., Лутай В.Н.