Смущен по поводу возвращаемого значения из Fread - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь прочитать файл, используя fread. Я основываюсь на документации здесь: http://www.cplusplus.com/reference/cstdio/fread/

Я хочу читать из файла 4 фрагмента за раз.

Вот что у меня есть :

int vol_buffer_size = SLICE_SIZE * 4;  //SLICE_SIZE = 759000  bytes
unsigned short vol_buffer[vol_buffer_size];

 for (int j = 0; j < num_slps; j++){                   
    nByteRead = fread(&vol_buffer, SLICE_SIZE, 4, volFile);
}

Когда я это делаю, nByteRead выдает 4 байта при первом чтении. Когда я делаю это так:

nByteRead = fread(&vol_buffer, 4, SLICE_SIZE, volFile);

nByteRead выдает 759000 байт или один фрагмент. Но я хочу, чтобы он прочитал 759000 * 4 байта, что соответствует 4 слайсам. Что я здесь не так делаю? Я в замешательстве, потому что в документации сказано, что 2-й параметр - это размер, который я бы назвал SLICE_SIZE, а 3-й параметр - это число, которое, я думаю, в этом случае будет равно 4.

1 Ответ

1 голос
/ 31 января 2020

Функция fread определяется следующим образом :

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

, где аргумент size указывает размер (в байтах) каждого элемента для чтения и count указывает (максимальное) количество таких элементов для чтения. Возвращаемым значением является число элементов, успешно прочитанных . Итак, в вашем первом случае:

nByteRead = fread(&vol_buffer, SLICE_SIZE, 4, volFile);

размер элементов задан как 759000, и вы просите прочитать (до) 4 таких объектов. Вызов завершается успешно, и функция возвращает 4. Во втором случае:

nByteRead = fread(&vol_buffer, 4, SLICE_SIZE, volFile);

вы просите прочитать 759000 элементов, каждый из которых имеет размер 4 байт. Опять же, вызов завершается успешно и возвращает количество прочитанных элементов.

В обоих случаях число байтов прочитанное одинаково (4 x 759000) - но это не что возвращает функция fread.

...