3. Функция fgets() возвращает указатель на строку string. В случае ошибки или конца файла возвращается значение NULL. Для определения того, что произошло – ошибка или конец файла – используются функции feof() и ferror().
В примере 7.3 представлена функция, подсчитывающая с помощью функции fgets() количество строк в файле.
Пример7.3.
unsigned FileSize(FILE *fp)
{ unsigned n=0; char B[256];
while (!feof(fp)) { if(fgets(B,255,fp)!=NULL) n=n+1; };
return (n);
}
Помимо функций – обобщенных вариантов консольных функций – для чтения/записи в дисковые файлы существуют еще две функции: fread() и fwrite().
Функция с заголовком int fread(char * buffer, int size, int count, FILE * stream) считывает объекты (общее количество объектов – count, размер в байтах каждого объекта – size) из потока stream и записывает эти объекты, начиная с адреса – значения переменной buffer. Функция fread() возвращает число действительно прочитанных объектов. Если при чтении возникла ошибка или встретился конец файла, возвращаемое число меньше, чем значение параметра count.
Функция с заголовком int fwrite(char * buffer, int size, int count, FILE * stream) записывает объекты (общее количество объектов – count, размер в байтах каждого объекта – size) в поток stream. Объекты расположены начиная с адреса – значения переменной buffer. В случае ошибки, т.е. если число полностью записанных объектов меньше, чем count, функция возвращает это число.
В примере 7.4 100 двоичных длинных целых из файла с именем data записывается по адресу list .
Пример7.4.
#include <stdio.h>
void main (void)
{FILE *stream; long list[100]; int numread;
stream = fopen("data", "r+b");
numread = fread((char *)list, sizeof(long), 100, stream);
}
7.3. СРЕДСТВА ПОЗИЦИОНИРОВАНИЯ ФАЙЛОВ
Функции, рассмотренные в разделе 7.2, позволяют только последовательно считывать/записывать информацию. Средства позиционирования файлов позволяют работать с файлами на диске как с обычным символьным массивом, осуществляя доступ к нужному байту файла.
Функция с заголовком long int ftell (FILE *stream) позволяет определить номер активной позиции, т.е. той позиции с которой начнется работа очередной вызываемой функции. Строго говоря, функция возвращает значение индикатора текущей позиции в файле, на который указывает stream, как смещение (значение типа long int) относительно начала файла. В случае двоичных потоков это значение равно количеству байт, который отделяют указатель от начала файла. Для текстовых потоков возвращаемое значение может не иметь определенной интерпретации. Это связано с возможными преобразованиями символов, влияющими на размер файла. Например, комбинация кодов возврата каретки (ASCII 13) и конца строки (ASCII 10) заменяются разделителем строк.
В случае ошибки функция ftell () возвращает значение -1L.
При работе с файлом, т.е. в процессе записи/чтения, часто возникает необходимость перейти к определенной позиции файла. Соответствующее перемещение указателя в любое место файла позволяет осуществить функция fseek() с заголовком
int fseek(FILE * stream, long offset, int origin). Функция fseek() устанавливает указатель текущей позиции файла, связанного с потоком stream, в соответствии со значениями параметров origin и offset. При этом параметр origin задает точку отсчета (начала смещения) в потоке, а параметр offset – количество байт, на которые будет смещен внутренний указатель файла относительно этой точки отсчета.
В качестве значения параметра origin можно использовать один из трех макросов, определенных в заголовке <stdio.h>: SEEK_SET, SEEK_CUR, SEEK_END, – в зависимости от выбора точки отсчета в потоке. Справедливы следующие соответствия:
SEEK_SET ↔ 0 ↔ точка отсчета – начало файла;
SEEK_CUR ↔ 1 ↔ точка отсчета – текущая позиция в файле;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.