Если ваша линия fread
не делает то, что вы ожидали, я бы посмотрел на то, что установлено для fileLength
. Если это больше байтов, чем можно прочитать, то fread
будет возвращать ноль.
Одна вещь, которую вы должны иметь в виду, что fread()
возвращает количество элементов чтения, а не количество байт (подчеркнуто мною):
size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
В случае успеха, fread()
вернуть номер штук прочитайте. Это число равно числу байтов, переданных только, когда размер 1.
Так есть разница между этими двумя:
size_t n = fread (buffer, s, 1, fp);
size_t n = fread (buffer, 1, s, fp);
Первое чтение до один элемент от размера s
, так что только когда-либо будет возвращено ноль или один. Второй считывает до s
элементов одного размера, поэтому может возвращать значение 0..s
включительно.
последний является тот, который вы хотите использовать, если вы хотите, чтобы читать столько байт, в то время, как вы можете поместить в буфер:
char buff[128];
size_t sz;
FILE *fp = fopen ("name.ima", "rb");
if (fp != NULL) {
while ((sz = fread (buff, 1, sizeof (buff), fp)) > 0)
doSomethingWith (buffer, sz);
fclose (fp);
}
Что такое 'fileLength' для инициализации? Как вы выбрали эту ценность? Вы проверили значение, возвращаемое 'fopen()'? Тот, который возвращает 'fread()'? –