Чтение двоичных файлов - PullRequest
       51

Чтение двоичных файлов

0 голосов
/ 29 февраля 2012

Я имею дело с кодом, который читает данные из двоичного файла.Код приведен здесь.Кто-нибудь, пожалуйста, объясните мне роль fseek и fread здесь.

fc = fopen(CLOUDS_FILE, "rb");
if (fc == NULL){ fputs("File open error.\n", stderr); exit(1); }
crs = aux[CLRS];
fpos = (int) (pixel[2]*crs*crs + pixel[1]*crs + pixel[0]);
flsz = sizeof(fd);
fseek(fc, fpos*flsz, 0);
rd = fread((void *) &fd, flsz, 1, fc);
if (rd != 1){ fputs("Read error.\n", stderr); exit(1); }
fclose(fc);

Ответы [ 4 ]

1 голос
/ 29 февраля 2012

Чтение двоичного файла выполняется с помощью внутреннего «указателя», так же, как текстовые редакторы имеют положение курсора при редактировании чего-либо.При открытии файла в режиме чтения (с использованием fopen) указатель будет находиться в начале файла.Операции чтения (например, fread, которые будут считывать указанное количество байтов из потока) начинают чтение с позиции указателя и, как правило, продвигают указатель по завершении.Если необходимо только прочитать определенную часть файла, можно вручную установить указатель на определенную (относительную или абсолютную) позицию, для этого используется fseek.

1 голос
/ 29 февраля 2012

fseek () изменяет смещение файла.fread () считывает данные, начиная с текущего смещения, увеличивая смещение на количество прочитанных элементов.

(Или это вопрос совсем другой?страницы руководства)

0 голосов
/ 29 февраля 2012

Конечно, fseek пересылает индекс «read from» в файле в вычисленное смещение в CLOUDS_FILE, в то время как fread считывает один объект размера sizeof (fd) (независимо от того, что это fd, а это не в вашем вставленном коде) в ФД.

0 голосов
/ 29 февраля 2012
   #include <stdio.h>

   int fseek(FILE *stream, long offset, int whence);

Функция fseek () устанавливает индикатор положения файла для потока, на который указывает поток.Новая позиция, измеренная в байтах, получается путем добавления смещенных байтов к позиции, указанной в Fromce.Если wherece имеет значение SEEK_SET, SEEK_CUR или SEEK_END, то смещение относительно начала файла, индикатора текущей позиции или конца файла соответственно.

   #include <stdio.h>

   size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

Функция fread () считывает nmemb элементов данных, каждый размер имеет длину в байтах, из потока, на который указывает поток, и сохраняет их в местоположении, указанном в ptr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...