Программирование на языке С. Наместников С.М. - 46 стр.

UptoLike

Составители: 

46
}
В данном примере сначала создается файл, в который записывается строка
“It is an example using fseek and ftell functions.”. Затем этот файл открывается на
чтение и с помощью функции fseek(fp,0L,SEEK_END) указатель позиции
помещается в конец файла. Это достигается за счет установки флага
SEEK_END, который перемещает позицию в конец файла при нулевом
смещении. В результате функция ftell(fp) возвратит число символов в открытом
файле. В цикле функция fseek(fp,-i,SEEK_END) смещает указатель позиции на
–i символов относительно конца файла, после чего считывается символ
функцией getc(), стоящий на i-й позиции с конца. Так как переменная i
пробегает значения от 1 до length, то на экран будут выведены символы из
файла в обратном порядке.
Работа с бинарными файлами
Следует отметить, что во всех рассмотренных выше примерах функция
fopen() в режимах “r” и “w” открывает текстовый файл на чтение и запись
соответственно. Это означает, что некоторые символы форматирования текста,
например возврат каретки ‘\r’ не могут быть считаны как отдельные символы,
их как бы не существует в файле, но при этом они там есть
. Это особенность
текстового режима файла. Для более «тонкой» работы с содержимом файлов
существует бинарный режим, который представляет содержимое файла как
последовательность байтов где все возможные управляющие коды являются
просто числами. Именно в этом режиме возможно удаление или добавление
управляющих символов недоступных в текстовом режиме. Для того чтобы
открыть файл в
бинарном режиме используется также функция fopen() с
последним параметром равным “rb” и “wb” соответственно для чтения и
записи. Продемонстрируем особенности обработки бинарного файла на
примере подсчета числа управляющих символов возврата каретки ‘\r’ в файле,
открытый в текстовом режиме и бинарном.
Листинг 12. Программа подсчета числа символов ‘\r’ в файле.
#include <stdio.h>
int main(void)
{
FILE* fp = fopen("my_file.txt","w");
if(fp != NULL)
{
fprintf(fp,"It is\nan example using\nan binary file.");
}
fclose(fp);
char ch;
int cnt = 0;
fp = fopen("my_file.txt","r");
if(fp != NULL)